五、Django视图
概述:
作用:视图接受web请求,并响应web请求
本质:视图就是一个python中的函数
响应:
网页:重定向、错误视图
JSON数据
过程:
url配置:
配置流程:
指定根级url配置文件:
配置settings.py文件中的ROOT_URLCONF
ROOT_URLCONF = 'kaige.urls'
默认实现了
urlpatterns:
一个url实例的列表
url对象:正则表达式、视图名称、名称
url匹配正则的注意事项:
如果想要从url中获取一个值,需要对正则加小括号
匹配正则前方不需要加反斜杠"/"
正则前需要加r表示字符串不转义
引入其他url配置:
在应用中创建urls.py文件,定义本应用的url配置,在工程urls.py文件中使用include()方法
1 from django.contrib import admin 2 from django.urls import path 3 from django.conf.urls import url,include 4 5 urlpatterns = [ 6 # path('admin/', admin.site.urls), 7 url(r'^admin/', admin.site.urls), 8 url(r'^', include('myApp.urls',namespace="myApp")), 9 ]
url的反向解析:
概述:如果在视图、模版中使用了硬编码链接,在url配置发生改变时,动态生成链接的地址
解决:在使用链接时,通过url配置的名称,动态生成url地址
作用:使用url模版
视图函数:
定义视图:
本质:一个函数
视图参数:一个HttpRequest的实例、通过正则表达式获取的参数
位置:一般在views.py文件下定义
错误视图:
404视图:找不到网页(url匹配不成功)
500视图:在视图代码中出现错误(服务器代码)
400视图:错误出现在客户的操作
HttpRequest对象:
概述:服务器接收http请求后,会根据报文创建HttpRequest对象,视图的第一个参数就是HttpRequest对象,django创建的,之后调用视图时传递给视图
属性:
1 path:请求的完整路径(不包括域名和端口) 2 method:表示请求的方式,常用的有GET,POST 3 encoding:表示浏览器提交的数据的编码方式 4 GET:类似字典的对象,包含了get请求的所有参数 5 POST:类似字典的对象,包含了post请求的所有参数 6 FILES:类似字典的对象,包含了所有上传的文件 7 COOKIES:字典,包含所有的cookie 8 session:类似字典的对象,表示当前会话
方法:
is_ajax():如果是通过XMLHttpRequest发起的,返回True
QueryDict对象:
request对象中的GET、POST都属于QueryDict对象
方法:
get():根据键获取值,只能获取一个值
getlist():将键的值以列表的形式返回,可以获取多个值
GET属性:
获取浏览器传递过来给服务器的数据
POST属性:
使用表单提交,实现post请求
HttpResponse对象:
概述:HttpRequest对象是由django创建的,HttpResponse对象由程序员创建
作用:给浏览器返回数据
返回用法:
不调用模版,直接返回数据
调用模版
属性:
1 context:表示返回的内容 2 charset:编码格式 3 status_code:响应状态码 4 context-type:指定输出的MIME类型
方法:
1 init():使用页面内容实例化HttpResponse对象 2 write(content):以文件的形式写入 3 flush():以文件的形式输出缓冲区 4 set_cookie(key,value='',max_age=None,expires=None):设置cookie 5 delete_cookie(key):删除cookie 6 注意:如果删除一个不存在的key,就当什么都没有发生
子类HttpResponseRedirect:
功能:重定向,服务器端跳转
子类JsonResponse:
作用:返回json数据,一般用于异步请求
状态保持:
概述:
http协议是无状态的,每次请求都是一次新的请求,不记得以前的请求
客户端与服务器端的一次通信就是一次会话
实现状态保持,在客户端或者服务端存储有关会话的数据
存储方式:
cookie:所有的数据存储在客户端,不要存敏感的数据
session:所有的数据存储在服务端,在客户端用cookie存储session_id
状态保持的目的:在一段时间内跟踪请求者的状态,可以实现跨页面访问当前的请求者的数据
注意:不同的请求者之间不会共享这个数据,与请求者一一对应
启用session:
在settings.py文件中修改
INSTALLED_APPS:'django.contrib.sessions',
MIDDLEWARE:'django.contrib.sessions.middleware.SessionMiddleware',
使用session:
启用session后,每个HttpRequest对象都有一个session属性,就是一个类似字典的对象
1 get(key,default=None):根据键获取session值 2 clear():清空所有的会话 3 flush():删除当前的会话并删除会话的cookie 4 logout():清除session
设置过期时间:
set_expiry(value):如果不设置,两个星期后过期
存储session的位置:
数据库:默认存储在数据库中
SESSION_ENGINE='django.contrib.session.backends.db'
缓存:只存储在本地内存中,如果丢失不能找回,比数据库快
SESSION_ENGINE='django.contrib.session.backends.cache'
数据库和缓存:优先从本地缓存中读取,读取不到再去数据库中获取
SESSION_ENGINE='django.contrib.session.backends.cached_db'
使用redis缓存session:
1 pip3 install django-redis-sessions 2 3 SESSION_ENDINE='redis_sessions.session' 4 SESSION_REDIS_HOST = 'localhost' 5 SESSION_REDIS_PORT = 6379 6 SESSION_REDIS_DB = 0 7 SESSION_REDIS_PASSWORD = 'sunck' 8 SESSION_REDIS_PREFIX = 'session'