codecamp

Django4.0 编写视图-返回错误信息

Django 提供了有关返回 HTTP 错误代码的帮助。​HttpResponse ​的子类除了200外,还有很多常见的 HTTP 状态代码。返回这些子类中某个子类的实例而不是 ​HttpResponse ​来表示错误。比如:

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>')

并不是每个可用 HTTP 响应代码都有专门指定的子类,因为它们很多并不常见。然而,如 ​HttpResponse ​文档中所述的那样,你也可以将 HTTP 状态代码传递给 ​HttpResponse ​的构造函数,这样就可以为任何状态代码创建返回类。比如:

from django.http import HttpResponse

def my_view(request):
    # ...

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

因为 404 错误是最常见的 HTTP 错误,这里有更简单的方法来处理这些错误。

Http404 异常

class django.http.Http404

当你返回错误,例如 ​HttpResponseNotFound ​,你需要定义错误页面的 HTML 。

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

为方便起见,在你的网站里有个一致的 404 错误页面是个好办法,Django 提供 ​Http404 ​异常。如果你在视图的任何地方引发了 ​Http404 ​,Django 会捕捉到它并且返回标准的错误页面,连同 HTTP 错误代码 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时显示自定义的 HTML,你可以创建名为 404.html 的HTML模板,并将其放置在你的模板树顶层。这个模板将在 DEBUG 设为 ​False时提供。
当 DEBUG 为 ​True ​时,你可以提供 ​Http404 ​信息,并且在标准的 404 调试模板里显示。使用这些信息来调试;它们通常不适合在生产环境下的404模板。


Django4.0 编写视图-一个简单的视图
Django4.0 编写视图-自定义报错视图
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Django4.0 模型和数据库

Django4.0 处理HTTP请求

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }