编写视图
这里是一个以 HTML 文档形式返回当前日期和时间的视图:
让我们来完成这个代码:
首先,我们从
django.http
模块导入类 ,以及 Python 的datetime
库。然后,我们定义一个名为
current_datetime
的函数。这是一个视图函数。每个视图函数都将HttpRequest
对象作为第一个参数,通常名为request
。注意视图函数名称无关紧要;它不需要以特定的名称来让 Django 识别它。我们在这里命名
current_datetime
,因为这个名字可以清楚的表示它的用途。视图返回一个包含生成的响应的 对象。每个视图函数都要返回
HttpResponse
对象。(有例外,我们稍后再讲)
Django 时区
Django 包含 设置,默认是 America/Chicago
。你可以在配置文件里改成你所在的时区。
Django 提供了有关返回 HTTP 错误代码的帮助。HttpResponse
的子类除了200外,还有很多常见的 HTTP 状态代码。你可以在 文档中找到所有可用子类的列表。返回这些子类中某个子类的实例而不是 HttpResponse
来表示错误。比如:
from django.http import HttpResponse, HttpResponseNotFound
# ...
if foo:
return HttpResponseNotFound('<h1>Page not found</h1>')
return HttpResponse('<h1>Page was found</h1>')
并不是每个可用 HTTP 响应代码都有专门指定的子类,因为它们很多并不常见。然而,如 文档中所述的那样,你也可以将 HTTP 状态代码传递给 HttpResponse
的构造函数,这样就可以为任何状态代码创建返回类。比如:
from django.http import HttpResponse
def my_view(request):
# ...
# Return a "created" (201) response code.
因为 404 错误是最常见的 HTTP 错误,这里有更简单的方法来处理这些错误。
class django.http.``Http404
当你返回错误,例如 ,你需要定义错误页面的 HTML 。
为方便起见,在你的网站里有个一致的 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):
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
时提供。
Django 里默认的报错视图应该能满足大部分的 Web 应用,但你也可以很方便的自定义。指定处理程序,如下方所示。(在其他地方配置它不会有任何效果)。
可以用 : 覆盖 page_not_found()
视图:
handler404 = 'mysite.views.my_custom_page_not_found_view'
可以用 : 覆盖 server_error()
视图:
可以用 : 覆盖 permission_denied()
视图:
可以用 : 覆盖 bad_request()
视图:
参见
使用 来覆盖 CSRF 报错视图。
测试自定义报错视图
为了测试自定义报错处理的响应,可以适当地在测试视图里引发异常。例如: