mirror of
https://github.com/django/django.git
synced 2025-07-24 13:44:32 +00:00
Fixed #26601 -- Improved middleware per DEP 0005.
Thanks Tim Graham for polishing the patch, updating the tests, and writing documentation. Thanks Carl Meyer for shepherding the DEP.
This commit is contained in:
parent
05c888ffb8
commit
9baf692a58
81 changed files with 900 additions and 1414 deletions
|
@ -8,6 +8,7 @@ from django.template import engines
|
|||
from django.template.response import TemplateResponse
|
||||
from django.test import RequestFactory, SimpleTestCase, override_settings
|
||||
from django.test.utils import patch_logger
|
||||
from django.utils.deprecation import MiddlewareMixin
|
||||
|
||||
|
||||
class TestException(Exception):
|
||||
|
@ -15,13 +16,14 @@ class TestException(Exception):
|
|||
|
||||
|
||||
# A middleware base class that tracks which methods have been called
|
||||
class TestMiddleware(object):
|
||||
def __init__(self):
|
||||
class TestMiddleware(MiddlewareMixin):
|
||||
def __init__(self, get_response=None):
|
||||
self.process_request_called = False
|
||||
self.process_view_called = False
|
||||
self.process_response_called = False
|
||||
self.process_template_response_called = False
|
||||
self.process_exception_called = False
|
||||
self.get_response = get_response
|
||||
|
||||
def process_request(self, request):
|
||||
self.process_request_called = True
|
||||
|
@ -115,7 +117,11 @@ class NoResponseMiddleware(TestMiddleware):
|
|||
super(NoResponseMiddleware, self).process_response(request, response)
|
||||
|
||||
|
||||
@override_settings(ROOT_URLCONF='middleware_exceptions.urls')
|
||||
@override_settings(
|
||||
ROOT_URLCONF='middleware_exceptions.urls',
|
||||
MIDDLEWARE_CLASSES=['django.middleware.common.CommonMiddleware'],
|
||||
MIDDLEWARE=None,
|
||||
)
|
||||
class BaseMiddlewareExceptionTest(SimpleTestCase):
|
||||
|
||||
def setUp(self):
|
||||
|
@ -492,12 +498,10 @@ class MiddlewareTests(BaseMiddlewareExceptionTest):
|
|||
# Check that the right middleware methods have been invoked
|
||||
self.assert_middleware_usage(middleware, True, True, True, True, False)
|
||||
|
||||
@override_settings(
|
||||
MIDDLEWARE_CLASSES=['middleware_exceptions.middleware.ProcessExceptionMiddleware'],
|
||||
)
|
||||
@override_settings(MIDDLEWARE=['middleware_exceptions.middleware.ProcessExceptionMiddleware'])
|
||||
def test_exception_in_render_passed_to_process_exception(self):
|
||||
# Repopulate the list of middlewares since it's already been populated
|
||||
# by setUp() before the MIDDLEWARE_CLASSES setting got overridden
|
||||
# by setUp() before the MIDDLEWARE setting got overridden.
|
||||
self.client.handler.load_middleware()
|
||||
response = self.client.get('/middleware_exceptions/exception_in_render/')
|
||||
self.assertEqual(response.content, b'Exception caught')
|
||||
|
@ -868,7 +872,7 @@ class RootUrlconfTests(SimpleTestCase):
|
|||
|
||||
class MyMiddleware(object):
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, get_response=None):
|
||||
raise MiddlewareNotUsed
|
||||
|
||||
def process_request(self, request):
|
||||
|
@ -877,7 +881,7 @@ class MyMiddleware(object):
|
|||
|
||||
class MyMiddlewareWithExceptionMessage(object):
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, get_response=None):
|
||||
raise MiddlewareNotUsed('spam eggs')
|
||||
|
||||
def process_request(self, request):
|
||||
|
@ -887,6 +891,7 @@ class MyMiddlewareWithExceptionMessage(object):
|
|||
@override_settings(
|
||||
DEBUG=True,
|
||||
ROOT_URLCONF='middleware_exceptions.urls',
|
||||
MIDDLEWARE=['django.middleware.common.CommonMiddleware'],
|
||||
)
|
||||
class MiddlewareNotUsedTests(SimpleTestCase):
|
||||
|
||||
|
@ -897,9 +902,7 @@ class MiddlewareNotUsedTests(SimpleTestCase):
|
|||
with self.assertRaises(MiddlewareNotUsed):
|
||||
MyMiddleware().process_request(request)
|
||||
|
||||
@override_settings(MIDDLEWARE_CLASSES=[
|
||||
'middleware_exceptions.tests.MyMiddleware',
|
||||
])
|
||||
@override_settings(MIDDLEWARE=['middleware_exceptions.tests.MyMiddleware'])
|
||||
def test_log(self):
|
||||
with patch_logger('django.request', 'debug') as calls:
|
||||
self.client.get('/middleware_exceptions/view/')
|
||||
|
@ -909,9 +912,7 @@ class MiddlewareNotUsedTests(SimpleTestCase):
|
|||
"MiddlewareNotUsed: 'middleware_exceptions.tests.MyMiddleware'"
|
||||
)
|
||||
|
||||
@override_settings(MIDDLEWARE_CLASSES=[
|
||||
'middleware_exceptions.tests.MyMiddlewareWithExceptionMessage',
|
||||
])
|
||||
@override_settings(MIDDLEWARE=['middleware_exceptions.tests.MyMiddlewareWithExceptionMessage'])
|
||||
def test_log_custom_message(self):
|
||||
with patch_logger('django.request', 'debug') as calls:
|
||||
self.client.get('/middleware_exceptions/view/')
|
||||
|
@ -926,3 +927,11 @@ class MiddlewareNotUsedTests(SimpleTestCase):
|
|||
with patch_logger('django.request', 'debug') as calls:
|
||||
self.client.get('/middleware_exceptions/view/')
|
||||
self.assertEqual(len(calls), 0)
|
||||
|
||||
|
||||
@override_settings(
|
||||
MIDDLEWARE_CLASSES=['django.middleware.common.CommonMiddleware'],
|
||||
MIDDLEWARE=None,
|
||||
)
|
||||
class MiddlewareNotUsedMiddlewareClassesTests(MiddlewareNotUsedTests):
|
||||
pass
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue