1
0
mirror of https://github.com/django/django.git synced 2025-10-25 06:36:07 +00:00

Fixed #26915 -- Fixed regression handling responses returned from view middleware.

This commit is contained in:
Alex Hill
2016-07-19 16:45:32 +08:00
committed by Tim Graham
parent ec4a6b33a9
commit 44a6b40280
5 changed files with 85 additions and 10 deletions

View File

@@ -56,12 +56,25 @@ class ViewMiddleware(TestMiddleware):
return HttpResponse('View Middleware')
class TemplateResponseViewMiddleware(TestMiddleware):
def process_view(self, request, view_func, view_args, view_kwargs):
super(TemplateResponseViewMiddleware, self).process_view(request, view_func, view_args, view_kwargs)
template = engines['django'].from_string('TemplateResponse View Middleware')
return TemplateResponse(request, template)
class ResponseMiddleware(TestMiddleware):
def process_response(self, request, response):
super(ResponseMiddleware, self).process_response(request, response)
return HttpResponse('Response Middleware')
class ContentAccessingResponseMiddleware(TestMiddleware):
def process_response(self, request, response):
super(ContentAccessingResponseMiddleware, self).process_response(request, response)
return HttpResponse('Content-accessing Response Middleware: %d' % len(response.content))
class TemplateResponseMiddleware(TestMiddleware):
def process_template_response(self, request, response):
super(TemplateResponseMiddleware, self).process_template_response(request, response)
@@ -512,6 +525,30 @@ class MiddlewareTests(BaseMiddlewareExceptionTest):
# Check that the right middleware methods have been invoked
self.assert_middleware_usage(middleware, True, True, True, True, False)
def test_templateresponse_from_process_view_rendered(self):
view_middleware = TemplateResponseViewMiddleware()
# ContentAccessingResponseMiddleware tries to access response.content
# in its process_response().
post_middleware = ContentAccessingResponseMiddleware()
self._add_middleware(view_middleware)
self._add_middleware(post_middleware)
self.assert_exceptions_handled('/middleware_exceptions/view/', [])
self.assert_middleware_usage(view_middleware, True, True, True, True, False)
self.assert_middleware_usage(post_middleware, True, True, True, True, False)
def test_templateresponse_from_process_view_passed_to_template_response_middleware(self):
"""
TemplateResponses returned from process_view() should be passed to any
process_template_response().
"""
view_middleware = TemplateResponseViewMiddleware()
resp_middleware = TemplateResponseMiddleware()
self._add_middleware(view_middleware)
self._add_middleware(resp_middleware)
self.assert_exceptions_handled('/middleware_exceptions/view/', [])
self.assert_middleware_usage(view_middleware, True, True, True, True, False)
self.assert_middleware_usage(resp_middleware, True, True, True, True, False)
class BadMiddlewareTests(BaseMiddlewareExceptionTest):