Django4.0 編寫(xiě)視圖-自定義報(bào)錯(cuò)視圖

2022-03-16 17:42 更新

Django 中的默認(rèn)錯(cuò)誤視圖應(yīng)該足以滿足大多數(shù) Web 應(yīng)用程序,但如果您需要任何自定義行為,可以輕松覆蓋。 在您的 URLconf 中指定如下所示的處理程序(在其他任何地方設(shè)置它們將無(wú)效)。

可以用 ?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'

測(cè)試自定義報(bào)錯(cuò)視圖

為了測(cè)試自定義報(bào)錯(cuò)處理的響應(yīng),可以適當(dāng)?shù)卦跍y(cè)試視圖里引發(fā)異常。例如:

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)


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)