介绍
这篇文章给大家分享的是有关Django中cookie的使用案例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
饼干是浏览器在客户端留下的一段记录,这段记录可以保留在内存或者硬盘上。因为Http请求是无状态的,通过读取饼干的记录,服务器或者客户端可以维持会话中的状态。比如一个常见的应用场景就是登录状态.Django里面,对饼干的读取和设置很简单.Cookie本身的格式类似字典,因此可以通过请求的键或者会获取,然后他的设置则是通过反应对象的set_cookie设定;如果要取消饼干,把过期时间设置为当前时间就行了。
<强>获取饼干:强>
request.COOKIES[& # 39;关键# 39;】 request.get_signed_cookie(键,默认=RAISE_ERROR,盐=& # 39;& # 39;,,max_age=没有) 参才能数: ,,,默认值:,默认值 ,,,:盐,加密盐 ,,,max_age:,后台控制过期时间
<强>设置饼干:强>
rep =, HttpResponse(…),或,rep =,渲染(请求,,…) rep.set_cookie(关键值,…) rep.set_signed_cookie(键、值、盐=& # 39;加密盐& # 39;,…) 参才能数: ,,,,,,,,,,键 ,,,价值=https://www.yisu.com/zixun/?值 max_age=None,超时时间=没有到期,超时时间(即需要到期,所以把它如果没有了。) 路径='/',饼干生效的路径,/表示根路径,特殊的:跟路径的饼干可以被任何url的页面访问 域=None,饼干生效的域名 安全=False, https传输 httponly=False只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
1例,设置一个登录登录界面,一个指数登录成功之后的跳转界面,如果没有登录那么自动跳转到登录界面
视图。py
def 指数(reqeust): #,才能获取当前已经登录的用户 v 才能=,reqeust.COOKIES.get (& # 39; username111& # 39;) if 才能;not v: ,,,return 重定向(& # 39;/登录/& # 39;) return 才能使(reqeust & # 39; index . html # 39;, {& # 39; current_user # 39;:, 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;才能h2>欢迎登录:{{,current_user }} & lt;/h2> & lt;/body> & lt;/html>
登录。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 行动=暗锹??方法=癙OST"比; ,,,& lt; input 类型=皌ext", name=皍sername",占位符=坝没?/比; ,,,& lt; input 类型=皃assword", name=皃wd",占位符=懊苈搿?/比; ,,,& lt; input 类型=皊ubmit",/比; & lt;才能/form> & lt;/body> & lt;/html>
例2:
现实生活中,一般是把这个验证饼干的功能写成装饰器,这样直接在其他函数上面调用就行了
把例1改一下
def 身份验证(函数): def 才能;内部(reqeust * args, * * kwargs): ,,,v =, reqeust.COOKIES.get (& # 39; username111& # 39;) ,,,if not v: ,,,,,return 重定向(& # 39;/登录/& # 39;) ,,,return func (reqeust, * args, * * kwargs) ,return 内部 @auth def 指数(reqeust): #,才能获取当前已经登录的用户 v 才能=,reqeust.COOKIES.get (& # 39; username111& # 39;) return 才能使(reqeust & # 39; index . html # 39;, {& # 39; current_user # 39;:, v})
例3:我们知道可以使用fbv或cb v者来都未路由函数。例2使用了fbv的方式,cb v用也都未能实现cb v
里都未面,如果只打算装饰一个方法,那么直接在方法前面加个@method_decorator就行,如果打算装饰这个类里面所有的方法,那么在整个类的最上面进行装饰
视图。py
@method_decorator(身份验证、名称=& # 39;派遣# 39;) class 顺序(views.View): #,才能@method_decorator(身份验证) #,才能def 调度(自我,,请求,,* args,, * * kwargs): #才能,,,return 超级(秩序、自我).dispatch(请求,,* args,, * * kwargs) #,才能@method_decorator(身份验证) def 才能得到(自我,reqeust): ,,,v =, reqeust.COOKIES.get (& # 39; username111& # 39;) ,,,return 渲染(reqeust & # 39; index . html # 39;, {& # 39; current_user # 39;:, v}) def 才能发布(自我,reqeust): ,,,v =, reqeust.COOKIES.get (& # 39; username111& # 39;) ,,,return 渲染(reqeust & # 39; index . html # 39;, {& # 39; current_user # 39;:, v}) urls . py ,url(" # 39; ^订单/& # 39;,,views.Order.as_view ()),Django中cookie的使用案例