- 视图是一个python函数,接收web请求并返回一个web响应。
- 响应可以是HTML页面,或者重定向,或者404和其他任何内容。
- 约定将视图放在views.py下面。
- 每个视图都会将HttpRequest对象作为第一个参数,通常名为request。
- 视图返回一个包含生成的响应的HttpResponse对象。
from django.http import HttpResponse
import datetime
def current_datetime(request):
now = datetime.datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)
HttpResponseNotFound返回错误时需要定义错误页面的HTML。
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>')
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})
- require_http_methods(request_method_list): 限制视图只接受特定的请求方法。
- require_GET(): 只接受GET请求。
- require_POST(): 只接受POST请求。
- require_safe(): 只接受GET和HEAD请求。
from django.views.decorators.http import require_http_methods
@require_http_methods(["GET", "POST"])
def my_view(request):
pass
- gzip_page():如果浏览器允许 gzip 压缩,那么这个装饰器将压缩内容。