07 Django 视图 Views

一、HttpRequestHttpRespone

Django 中的视图主要用来接收 web 请求,并做出响应,视图本质就是一个 Python 中的函数。

视图响应分为两大类

  1. Json 数据形式返回(JsonResponse
  2. 以网页形式返回
    1. 重定向到另一个网页(HttpResponseRedirect
    2. 错误视图(4XX5XX)(HttpResponseNotFoundHttpResponseForbiddenHttpResponsenNotAllowed 等)

视图的响应过程

浏览器输入 url -> urls 路由匹配 -> 视图响应 -> 回馈到浏览器

视图参数:

  1. 一个 HttpRequset 的实例,一般名为 Request。如:def book_list(request)
  2. 通过 url 正则表达式传递过来的参数。如:def book_detail(request, bid) 中的 bid

位置:

通常在应用下的 views.py 中定义

错误视图:

  1. 404视图(页面没有找到)
  2. 400视图(客户操作错误)
  3. 500视图(服务器内部错误)

1. HttpRequest 详细介绍

服务器在接收到 Http 请求后,会根据报文创建 HttpRequest 对象。视图中的第一个参数就是 HttpRequest 对象。Django 框架接收到 Http 请求后会将 Http 请求包装为 HttpRequest 对象,之后转递给视图。

request常用属性和方法

属性

属性名称 功能
path 请求和完整路径
method 请求的方法,常用 GETPOST
GET 类似字典的参数,包含了 get 的所有参数
POST 类似字典的参数,包含了 post 的所有参数
FILES 类似字典的参数,包含了上传的文件
COOKIES 字典,包含了所有 COOKIES
session 类似字典,表示会话

方法

方法名称 功能
is_ajax() 判断是否是 ajax(),通常用在移动端和 JS
get_full_path() 返回包含参数字符串的请求路径

QueryDict: 类字典的对象

类似字典的数据结构,与字典的区别是类字典可以存在想同的键

QueryDict 的方法

方法名称 功能
dict.get('uname') dict['uname'] 取出 uname 键对应的 value
dict.getlist('uname') 获取 uname 键对应的所有 value

2. HttpResponse 详细介绍

服务器返回给客户端的数据。

HttpResponse 由程序员自己创建

  1. 不使用模板,直接调用 HttpResponse(),返回 HttpResponse 对象
  2. 调用模板,使用 render 进行渲染,render(request, template_name[, context])
    1. request:请求对象
    2. template_name:使用的模板
    3. context:字典参数,用来填坑

属性

属性名称 内容
content 返回的内容
charset 编码格式
status_code 响应状态码(2xx3xx4xx5xx

方法

方法名称 功能
write(xxx) 直接写出文本
flush() 冲刷缓冲区
set_cookie(key, value="xxx", max_age=None 设置 cookie
delete_cookie(key) 删除 cookie

HttpResponse 子类

HttpResponseRedirect

响应重定向,可以实现服务内部跳转,

如:return HttpResponseRedirect("/book_detail/bid/")

实际使用时推荐使用反向解析

JsonResponse

返回 Json 数据的请求,通常用在异步请求上。

JsonResponse(dict),返回 Json 数据时,content-typeapplication/json