mirror of
https://github.com/django/django.git
synced 2025-10-17 13:58:24 +00:00
Fixed #24877 -- Added middleware handling of response.render() errors.
This commit is contained in:
parent
b91a2a499f
commit
f5d5867a4a
6 changed files with 47 additions and 10 deletions
8
tests/middleware_exceptions/middleware.py
Normal file
8
tests/middleware_exceptions/middleware.py
Normal file
|
@ -0,0 +1,8 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.http import HttpResponse
|
||||
|
||||
|
||||
class ProcessExceptionMiddleware(object):
|
||||
def process_exception(self, request, exception):
|
||||
return HttpResponse('Exception caught')
|
|
@ -486,6 +486,16 @@ 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'],
|
||||
)
|
||||
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
|
||||
self.client.handler.load_middleware()
|
||||
response = self.client.get('/middleware_exceptions/exception_in_render/')
|
||||
self.assertEqual(response.content, b'Exception caught')
|
||||
|
||||
|
||||
class BadMiddlewareTests(BaseMiddlewareExceptionTest):
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ urlpatterns = [
|
|||
url(r'^middleware_exceptions/error/$', views.server_error),
|
||||
url(r'^middleware_exceptions/null_view/$', views.null_view),
|
||||
url(r'^middleware_exceptions/permission_denied/$', views.permission_denied),
|
||||
url(r'^middleware_exceptions/exception_in_render/$', views.exception_in_render),
|
||||
|
||||
url(r'^middleware_exceptions/template_response/$', views.template_response),
|
||||
url(r'^middleware_exceptions/template_response_error/$', views.template_response_error),
|
||||
|
|
|
@ -32,3 +32,11 @@ def null_view(request):
|
|||
|
||||
def permission_denied(request):
|
||||
raise PermissionDenied()
|
||||
|
||||
|
||||
def exception_in_render(request):
|
||||
class CustomHttpResponse(http.HttpResponse):
|
||||
def render(self):
|
||||
raise Exception('Exception in HttpResponse.render()')
|
||||
|
||||
return CustomHttpResponse('Error')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue