目录
Cookie和Session
- 目的:为了保存客户端的用户状态
- 原因:HTTP协议是无状态的
Cookie
保存在客户端浏览器上的键值对
cookie是有服务端设置的,浏览器有权禁止cookie的写入
Django操作cookie
利用 obj = HttpResponse() 对象操作cookie
设置cookie
obj.set_cookie('key','value')
获取cookie
obj.get_cookie('key') request.COOKIES.get('key')
设置cookie超时时间
obj.set_cookie('key','value',max_age=3) # 超时时间以秒为单位 obj.set_cookie('key','value',expires=3) # 给IE浏览器设置
删除cookie
注销或退出登陆
Session
保存在服务端上的键值对
session的工作机制依赖于cookie
设置session
request.session['key'] = 'value' # 第一次需要先执行数据库迁移命令,默认失效时间是14天
流程:
- Django内部自动调用算法生成一个随机的字符串
- 在django_session表中添加数据(密文),表字段:随机字符串(key),加密数据,失效时间
- 将产生的随机字符串返回给客户端浏览器保存,sessionid:随机字符串
获取session
request.session.get('key')
流程:
- Django内部自动去请求头中获取cookie
- 用cookie中的 sessionid 所对应的随机字符串去 django_session 表中比对
- 如果存在,将随机字符串对应的数据放入 request.session 中;否则返回空字典
删除session
request.session.delete() # 客户端和服务端全部删除,只根据浏览器的不同删除对应的数据 request.session.flush() #只删除客户端,服务端等待失效时间后自动删除
设置失效时间
request.session.set_expiry(value) ''' value可以是整数; 也可以是datetime或timedelta,session就会在设定时间过后失效; 当value是0时,用户关闭浏览器session就会失效; 当value是None时,session会依赖全局session失效策略; '''
中间件
中间件是一个用来处理Django的请求和响应的框架级别的钩子,用于在全局范围内改变django的输入和输出,也就是说在视图函数执行之前和执行之后都可以做一些额外的操作
Django默认有七个中间件,支持自定义中间件,可以用来做一些全局性的功能,比如全局的用户登陆校验、用户访问频率的校验、用户权限校验
Django暴露给用户五个可以自定义的方法
# process_request ''' 1.请求来的时候,会按照settigs中从上到下的顺序执行每个中间件内部定义的process_request方法 2.该方法一旦返回了HttpResponse对象,会立即原路返回,不会执行后面的中间件 '''
# process_response ''' 1.响应走的时候会按照settings中从下到上的顺序,依次执行每个中间件内部定义的 process_response方法 2.该方法必须有两个参数,requese和resonse,必须返回response形参,否则报错 3.前端获得的就是该方法返回的HttpResponse对象 '''
# process_view ''' 1.路由匹配成功之后、视图函数执行之前触发 2.如果该方法返回了HttpResponse对象,会一次经过每一个中间件的process_response方法 '''
# process_template_response ''' 1.在返回的对象中含有render属性指向的是一个render方法时触发 '''
# process_exception ''' 当视图函数中出现错误时自动触发 '''