diff --git a/django/core/handlers/base.py b/django/core/handlers/base.py index e6ef6e2f9e..a6519d6167 100644 --- a/django/core/handlers/base.py +++ b/django/core/handlers/base.py @@ -63,6 +63,26 @@ class BaseHandler(object): # as a flag for initialization being complete. self._request_middleware = request_middleware + def process_request(self, request_env): + signals.request_started.send(sender=self.__class__) + try: + try: + request = self.request_class(request_env) + except UnicodeDecodeError: + response = http.HttpResponseBadRequest() + else: + response = self.get_response(request) + + # Apply response middleware + if not isinstance(response, http.HttpResponseSendFile): + for middleware_method in self._response_middleware: + response = middleware_method(request, response) + response = self.apply_response_fixes(request, response) + finally: + signals.request_finished.send(sender=self.__class__) + + return response + def get_response(self, request): "Returns an HttpResponse object for the given HttpRequest" from django.core import exceptions, urlresolvers diff --git a/django/core/handlers/modpython.py b/django/core/handlers/modpython.py index c6dcf23e9a..95a99e89bc 100644 --- a/django/core/handlers/modpython.py +++ b/django/core/handlers/modpython.py @@ -2,7 +2,6 @@ import os from pprint import pformat from django import http -from django.core import signals from django.core.handlers.base import BaseHandler from django.core.urlresolvers import set_script_prefix from django.utils import datastructures @@ -191,21 +190,7 @@ class ModPythonHandler(BaseHandler): self.load_middleware() set_script_prefix(req.get_options().get('django.root', '')) - signals.request_started.send(sender=self.__class__) - try: - try: - request = self.request_class(req) - except UnicodeDecodeError: - response = http.HttpResponseBadRequest() - else: - response = self.get_response(request) - - # Apply response middleware - for middleware_method in self._response_middleware: - response = middleware_method(request, response) - response = self.apply_response_fixes(request, response) - finally: - signals.request_finished.send(sender=self.__class__) + response = self.process_request(req) # Convert our custom HttpResponse object back into the mod_python req. req.content_type = response['Content-Type'] diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py index 927b098815..10a5af7ab0 100644 --- a/django/core/handlers/wsgi.py +++ b/django/core/handlers/wsgi.py @@ -6,7 +6,6 @@ except ImportError: from StringIO import StringIO from django import http -from django.core import signals from django.core.handlers import base from django.core.urlresolvers import set_script_prefix from django.utils import datastructures @@ -231,21 +230,7 @@ class WSGIHandler(base.BaseHandler): self.initLock.release() set_script_prefix(base.get_script_name(environ)) - signals.request_started.send(sender=self.__class__) - try: - try: - request = self.request_class(environ) - except UnicodeDecodeError: - response = http.HttpResponseBadRequest() - else: - response = self.get_response(request) - - # Apply response middleware - for middleware_method in self._response_middleware: - response = middleware_method(request, response) - response = self.apply_response_fixes(request, response) - finally: - signals.request_finished.send(sender=self.__class__) + response = self.process_request(environ) try: status_text = STATUS_CODE_TEXT[response.status_code]