Skip to content

Latest commit

 

History

History
60 lines (54 loc) · 2.08 KB

编写视图.md

File metadata and controls

60 lines (54 loc) · 2.08 KB
  • 视图是一个python函数,接收web请求并返回一个web响应。
  • 响应可以是HTML页面,或者重定向,或者404和其他任何内容。
  • 约定将视图放在views.py下面。

1.一个简单的视图

  • 每个视图都会将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)

2.url与视图映射

URL调度器

3.HttpResponseNotFound 与 Http404

HttpResponseNotFound

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

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

4.视图装饰器

允许的HTTP方法
  • 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压缩
  • gzip_page():如果浏览器允许 gzip 压缩,那么这个装饰器将压缩内容。