因为HTTP协议是无状态的,每发送完请求后都会断开链接,所以有时为了保存
状态用到cookie和session
cookie 是保存在浏览器上的,session是保存在后台的
cookie相当于一个口令,从服务端发给客户端的一系列字符串,每次发送请求都带着这个口令
session就是一个大字典,用户发送过来cookie,要和session进行比对,成功则保持状态,cookie存储有限,session还存一些其他私密信息
获取session:
request.session['k1']
request.session.get('k1',None)
设置session
request.session['k1']=123
request.session.setdefault['k1',123] #存在就不设置
查询session:
request.session.keys()
request.session.values()
request.session.items()
request.sessioon.iterkeys()
request.session.itervalues()
request.session.iteritems()
会将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()
检查是否存在session的key
request.session.exists('k1')
删除当前会话的所有session数据,客户端的cookie不会删
request.session.delete()
删除当前会话的所有session数据和客户端的cookie
request.session.flush()
设置会话session和cookie的超时时间
request.session.set_expiry(value)
如果value是整数,则在多少秒之后消失
如果value是datatime或者timedelta,session就会在这个时间消失
如果是0,用户关闭浏览器就失效,
如果不设置,或者None,session默认是2周失效
在类中给类方法加函数装饰器,不能直接加,Django内置了一个方法
from django.utils.decorators import method_decorator
然后method_decorator(check_login)
这是直接加在类里get 和post方法之上的
当直接加在类的上面时必须要加上name关键字,method_decorator(check_login,name='get')
补充:CSRF Token相关装饰器在CBV只能加在dispatch方法上
csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。
csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件