views.py

1
from django.shortcuts import render

定义自己的视图函数:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from django.http import HttpResponse
from django.template import RequestContext, loader

# 导入模板中的类
from .models import Question

def index(request):
    ...
    t = loader.get_template('application/index.html')
    c = RequestContext(request, {'foo': 'bar'})
    return HttpResponse(t.render(c), content_type="text/html")

当请求一个页面时django会建立一个包含请求元数据的HttpRequest对象,当django加载对应视图时,这个对象作为视图第一个参数。

每个视图会返回一个HttpResponse对象。

每个视图函数都用HttpRequest对象(通常用request)作为第一个参数。

每个视图函数都返回一个HttpResponse对象,包含生成的响应。

HttpRquest和HttpResponse在django.http包中,参考:

http://python.usyiyi.cn/documents/django_182/ref/request-response.html

HttpRequest对象属性:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
request.scheme # http/https
request.body
request.path
request.path_info
request.method # GET/POST
request.encoding
request.user
request.session
request.urlconf
request.GET
request.POST
request.REQUEST
request.COOKIES
request.FILES
request.META

HttpRequest对象方法:

1
2
request.get_host()
...

HttpResponse对象属性:

1
2
3
4
5
6
response.content
response.charset
response.status_code
response.reason_phrase
response.streaming
response.closed

HttpResponse对象的方法:

1
2
response.getvalue()
...

返回错误:

HttpResponse的子类提供了对不同类型HTTP响应。

1
2
from django.http import HttpResponseBadRequest, HttpResponseNotFound, HttpResponseForbidden, HttpResponseServerError,
return HttpResponseNotFound("<h1>Page not found</h1>")

http404异常:

在应用的模板目录顶层定义一个404.html模板文件,当跑出Http404异常就会调用这个模板文件展示。

1
2
3
4
5
6
7
8
from django.http import Http404

def index(request):
    try:
        ...
    except Application.DoesNotExist:
        raise Http404("Application does not exist")
    return HttpResponse(...)

自定义错误视图:

参考urls中的内容。

快捷函数

django.shortcuts中定义了多个快捷函数。

1
2
3
4
5
6
7
8
from django.shortcuts import render
render(request, template_name, context=None, context_instance=<object object>, content_type=None, status=None, current_app=<object object>, dirs=<object object>, dictionary=<object object>, using=None)
# render第一个参数是request,根据给定模板和上下文字典,返回一个渲染后的HttpResponse对象。
return render(request, 'application/index.html', {'foo': 'bar'}, content_type="text/html")

from django.shortcuts import get_object_or_404
get_object_or_404(klass, *args, **kwargs)
# 在给定的模型管理器调用get(),如果不存在引发Http404异常。

基于类的视图

基于类的视图的基类在django.views.generic中

1
2
3
4
from django.views.generic import View
def MyView(View):
    def get(self, request):
        return HttpResponse(...)

TemplateResponse和SimpleTemplateResponse

1
from django.template.response import TemplateResponse, SimpleTemplateResponse

视图装饰器

django.views.decorators包中定义了视图的装饰器。

1
from django.views.decorators import *

内建的视图

django.views.static.serve定义了开发环境的文件服务器视图,仅用于开发。

1
from django.views.static import serve

django.views.defaults定义了内建的错误处理的视图

1
from django.views.defaults import *