day60

旧巷老猫 提交于 2019-12-06 12:58:41

Cookie和Session

  • 目的:为了保存客户端的用户状态
  • 原因:HTTP协议是无状态的

保存在客户端浏览器上的键值对

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天

流程:

  1. Django内部自动调用算法生成一个随机的字符串
  2. 在django_session表中添加数据(密文),表字段:随机字符串(key),加密数据,失效时间
  3. 将产生的随机字符串返回给客户端浏览器保存,sessionid:随机字符串

获取session

request.session.get('key')

流程:

  1. Django内部自动去请求头中获取cookie
  2. 用cookie中的 sessionid 所对应的随机字符串去 django_session 表中比对
  3. 如果存在,将随机字符串对应的数据放入 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
'''
当视图函数中出现错误时自动触发
'''

Django请求生命周期流程图

1575464981526

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!