注意注意注意:
cookie,session是用来记录请求状态的,即记录是谁发出了请求希望访问服务器,也就是说cookie是根据浏览器来记录的。
不同的浏览器就是不同的客户端,拥有不同的cookie。
同一个浏览器,发出的请求的状态是一样的。
比如,同一个浏览器开了两个单独的窗口,他们共用cookie,cookie存在浏览器缓存Cache中;若再开一个单独窗口,
第三个窗口,发出的请求一样会携带cookie(同一浏览器共用的)。
(第三个窗口若有form表单,并有{% csrf_token %}隐式csrftoken,则会覆盖缓存中的csrf_token)
1. 设置Cookie
rep = redirect('/home/')
rep.set_cookie(key, value, max_age=60*60*24*7) --> 设置明文Cookie,有效期是7天
rep.set_signed_cookie(key, value, salt="", max_age=10) --> 设置加盐的Cookie,有效期是10秒
2. 获取Cookie
request.COOKIES --> 获取请求中的Cookie数据,数据格式是大字典
request.COOKIES[key] 不推荐这种写法
request.COOKIES.get(key, "默认值") 推荐使用这种方法取值
request.get_signed_cookie(key, default="默认值", salt="") --> 获取加盐的Cookie
request.GET --> 获取URL里面的参数
request.POST --> 获取POST请求的参数
request.FILES --> 上传文件的数据
3. 删除Cookie(用于注销)
rep = redirect('/home/')
rep.delete_cookie("key")
3 Session
Session是什么?
保存在服务器端的键值对,依赖于Cookie
为什么要有Session?
Cookie将数据保存在客户端(浏览器)上,数据不安全。
Cookie存储的数据有限制
Django中Session操作
1. 设置Session
1. request.session[key] = value
2. request.session.setdefault(key, value) --> 有就啥都不干,没有就赋值
2. 获取Session
1. request.session[key]
2. request.session.get(key) 推荐
3. 删除Session
1. request.session.delete()
2. request.session.flush() --> 删除Cookie和Session
4. 清空已经过期的session数据
request.session.clear_expired()
5. 设置Session过期时间
request.session.set_expiry(过期时间)
Django中Session的配置项
1. 配置写在settings.py中
2. 几个常用的配置项
1. 全局设置Session的过期时间
SESSION_COOKIE_AGE = 1209600 --> 默认两周
2. 设置每次请求来都刷新过期时间
SESSION_SAVE_EVERY_REQUEST = True
补充: CBV 装饰器版 登录验证
1. CBV加登陆验证的装饰器
1.原装饰器丝毫不做改动,inner函数与 func函数的参数不改动,仍为(request,*args,**kwargs)
使用Django提供的装饰器工具:
from django.utils.decorators import method_decorator
三种方式:
1.
2.
3.
2. 改动原装饰器,(不推荐)
2. 补充csrf相关装饰器
from django.views.decorators.csrf import csrf_exempt, csrf_protect
1. csrf_exempt 对某个视图取消csrf_token的验证
2. csrf_protect 对某个视图加上csrf_token的验证
补充: python 内置装饰器修复技术