Django中cookie的使用案例

  介绍

这篇文章给大家分享的是有关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的使用案例