
Django4.0 编写视图-自定义报错视图
Django 中的默认错误视图应该足以满足大多数 Web 应用程序,但如果您需要任何自定义行为,可以轻松覆盖。 在您的 URLconf 中指定如下所示的处理程序(在其他任何地方设置它们将无效)。
可以用 handler404
: 覆盖 page_not_found()
视图:
handler404 = 'mysite.views.my_custom_page_not_found_view'
可以用 handler500
: 覆盖 server_error()
视图:
handler500 = 'mysite.views.my_custom_error_view'
可以用 handler403
: 覆盖 permission_denied()
视图:
handler403 = 'mysite.views.my_custom_permission_denied_view'
可以用 handler400
: 覆盖 bad_request()
视图:
handler400 = 'mysite.views.my_custom_bad_request_view'
测试自定义报错视图
为了测试自定义报错处理的响应,可以适当地在测试视图里引发异常。例如:
from django.core.exceptions import PermissionDenied from django.http import HttpResponse from django.test import SimpleTestCase, override_settings from django.urls import path def response_error_handler(request, exception=None): return HttpResponse('Error handler content', status=403) def permission_denied_view(request): raise PermissionDenied urlpatterns = [ path('403/', permission_denied_view), ] handler403 = response_error_handler # ROOT_URLCONF must specify the module that contains handler403 = ... @override_settings(ROOT_URLCONF=__name__) class CustomErrorHandlerTests(SimpleTestCase): def test_handler_renders_template_response(self): response = self.client.get('/403/') # Make assertions on the response here. For example: self.assertContains(response, 'Error handler content', status_code=403)