Django中cookie的使用

  

饼干是浏览器在客户端留下的一段记录,这段记录可以保留在内存或者硬盘上。因为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的使用