Django4.0 編寫(xiě)視圖-返回錯(cuò)誤信息

2022-03-16 17:42 更新

Django 提供了有關(guān)返回 HTTP 錯(cuò)誤代碼的幫助。?HttpResponse ?的子類(lèi)除了200外,還有很多常見(jiàn)的 HTTP 狀態(tài)代碼。返回這些子類(lèi)中某個(gè)子類(lèi)的實(shí)例而不是 ?HttpResponse ?來(lái)表示錯(cuò)誤。比如:

from django.http import HttpResponse, HttpResponseNotFound

def my_view(request):
    # ...
    if foo:
        return HttpResponseNotFound('<h1>Page not found</h1>')
    else:
        return HttpResponse('<h1>Page was found</h1>')

并不是每個(gè)可用 HTTP 響應(yīng)代碼都有專(zhuān)門(mén)指定的子類(lèi),因?yàn)樗鼈兒芏嗖⒉怀R?jiàn)。然而,如 ?HttpResponse ?文檔中所述的那樣,你也可以將 HTTP 狀態(tài)代碼傳遞給 ?HttpResponse ?的構(gòu)造函數(shù),這樣就可以為任何狀態(tài)代碼創(chuàng)建返回類(lèi)。比如:

from django.http import HttpResponse

def my_view(request):
    # ...

    # Return a "created" (201) response code.
    return HttpResponse(status=201)

因?yàn)?404 錯(cuò)誤是最常見(jiàn)的 HTTP 錯(cuò)誤,這里有更簡(jiǎn)單的方法來(lái)處理這些錯(cuò)誤。

Http404 異常

class django.http.Http404

當(dāng)你返回錯(cuò)誤,例如 ?HttpResponseNotFound ?,你需要定義錯(cuò)誤頁(yè)面的 HTML 。

return HttpResponseNotFound('<h1>Page not found</h1>')

為方便起見(jiàn),在你的網(wǎng)站里有個(gè)一致的 404 錯(cuò)誤頁(yè)面是個(gè)好辦法,Django 提供 ?Http404 ?異常。如果你在視圖的任何地方引發(fā)了 ?Http404 ?,Django 會(huì)捕捉到它并且返回標(biāo)準(zhǔn)的錯(cuò)誤頁(yè)面,連同 HTTP 錯(cuò)誤代碼 404 。

用法示例:

from django.http import Http404
from django.shortcuts import render
from polls.models import Poll

def detail(request, poll_id):
    try:
        p = Poll.objects.get(pk=poll_id)
    except Poll.DoesNotExist:
        raise Http404("Poll does not exist")
    return render(request, 'polls/detail.html', {'poll': p})

為了在 Django 返回404時(shí)顯示自定義的 HTML,你可以創(chuàng)建名為 404.html 的HTML模板,并將其放置在你的模板樹(shù)頂層。這個(gè)模板將在 DEBUG 設(shè)為 ?False時(shí)提供。
當(dāng) DEBUG 為 ?True ?時(shí),你可以提供 ?Http404 ?信息,并且在標(biāo)準(zhǔn)的 404 調(diào)試模板里顯示。使用這些信息來(lái)調(diào)試;它們通常不適合在生產(chǎn)環(huán)境下的404模板。


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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)