饼干是浏览器在客户端留下的一段记录,这段记录可以保留在内存或者硬盘上。因为Http请求是无状态的,通过读取饼干的记录,服务器或者客户端可以维持会话中的状态。比如一个常见的应用场景就是登录状态.Django里面,对饼干的读取和设置很简单.Cookie本身的格式类似字典,因此可以通过请求的键或者获得获取,然后他的设置则是通过反应对象的set_cookie设定;如果要取消饼干,把过期时间设置为当前时间就行了。
获取饼干:
request.COOKIES(“关键”) request.get_signed_cookie(键,默认=RAISE_ERROR,盐=",,max_age=没有) ,,,参数: ,,,,,,,默认值:,默认值 ,,,,,,,,加盐:密盐 ,,,,,,,max_age:,后台控制过期时间<代码类=" python平原"> 代码>
设置饼干:
rep =, HttpResponse(…),或,rep =,渲染(请求,,…) , rep.set_cookie(关键值,…) rep.set_signed_cookie(关键值,盐='加密盐”,…) ,,,参数: ,,,,,,,,,,,,,,,,,,,,,键 ,,,,,,,的价值=",,,,,,,,,,值 ,,,,,,,max_age=没有,,,,,,超时时间 ,,,,,,,=没有到期,,,,,,超时时间(IE requires 到期,so set it if 没有't been 了。) ,,,,,,,路径='/',,,,,,,,,,饼干生效的路径,/,表示根路径,特殊的:跟路径的饼干可以被任何url的页面访问 ,,,,,,,域=没有,,,,,,,饼干生效的域名 ,,,,,,,安全=False,,,,,, https传输 ,,,,,,,httponly=False ,,,只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)<代码类=" python平原"> 代码>
1例,设置一个登录登录界面,一个指数登录成功之后的跳转界面,如果没有登录那么自动跳转到登录界面
views.py
def 指数(reqeust): ,,,#,获取当前已经登录的用户 ,,,v =, reqeust.COOKIES.get (“username111”) ,,,if not v: ,,,,,,,return 重定向('/登录/') ,,,return 渲染(reqeust, index . html, {“current_user”: v})
注意饼干的超时时间有2种方式,一个是直接指定max_age (N秒后超时),一个是指定到期后面跟一个具体的时间对象
httponly可以禁止JavaScript获取这个值,但是实际上没有什么鸟用,chrome或者抓包都能轻松获取所有的饼干
索引。html
& lt; ! DOCTYPE html> & lt; html  lang=癳n”比; & lt; head> ,,,& lt; meta charset=皍tf - 8”比; ,,,& lt; title> & lt;/title> & lt;/head> & lt; body> ,,,& lt; form action="/登录/?方法=癙OST”比; ,,,,,,,& lt; input type=" text ", name="用户名",占位符=坝没?/比; ,,,,,,,& lt; input type="密码",name=" pwd,占位符=懊苈搿?/比; ,,,,,,,& lt; input 类型=疤峤弧?/比; ,,,& lt;/form> & lt;/body> & lt;/html>
例2:
现实生活中,一般是把这个验证饼干的功能写成装饰器,这样直接在其他函数上面调用就行了
把例1改一下
def 身份验证(函数): ,,,def 内部(reqeust * args, * * kwargs): ,,,,,,,v =, reqeust.COOKIES.get (“username111”) ,,,,,,,if not v: ,,,,,,,,,,,return 重定向('/登录/') ,,,,,,,return func (reqeust, * args, * * kwargs) ,,,return 内部 ,,,, @auth def 指数(reqeust): ,,,#,获取当前已经登录的用户 ,,,v =, reqeust.COOKIES.get (“username111”) ,,,return 渲染(reqeust, index . html, {“current_user”: v})
例3:我们知道可以使用fbv或cb v者来都未路由函数。例2使用了fbv的方式,cb v用也都未能实现cb v
里都未面,如果只打算装饰一个方法,那么直接在方法前面加个@method_decorator就行,如果打算装饰这个类里面所有的方法,那么在整个类的最上面进行装饰
视图。py
Django中cookie的使用