• Django-cookie


    1、前言

    cookie:是保存在客户端浏览器上的一个文件,本质上以键值对的形式保存,类似字典{‘username':'wang'},与服务器没有关系,当浏览器向服务器发送请求时,服务器会自动生成一个随机的字符串保存在cookie中返回给客户端,这样当客户端下次访问时,会带着这个cookie访问服务器,经过检查此cookie已存在此随机字符串,表示此客户端为已通过认证的状态,可以直接登录。

    2、参数介绍

    2.1、max_age=1:cookie生效的时间,单位是秒

    2.2、expire:具体过期时间

    2.3、path='/':cookie生效的路径,/表示根路径,特殊的,根路径的cookie可以被任何URL访问

    2.4、domain:cookie生效的域名

    2.5、secure=False:https传输,与安全相关

    2.6、httponly=False:只能只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

    注意:cookie可以将字符串进行salt加解密,写法如下:

    obj = HttpResponse('s')
    obj.set_signed_cookie('username',"kangbazi",salt="asdfasdf")
    
    request.get_signed_cookie(
    'username',salt="asdfasdf")

     cookie的基本用法

    def cookie(request):
        request.COOKIES.get('username111')
        response=render(request,'index.html')
        response=redirect('/index/')
        # 设置cookie值,关闭浏览器失效
        response.set_cookie('key',"value")
        # 设置cookie值,超过N秒后失效
        response.set_cookie('username111','value',max_age=10)
        # 设置cookie值,从当前时间算起,经过N秒之后失效
        import datetime
        current_date=datetime.datetime.utcnow()
        current_date=current_date+datetime.timedelta(seconds=5)
        response.set_cookie('username111','value',expires=current_date)

    实例:带有装饰器的cookie

    def auth(func):
        def inner(request,*args,**kwargs):
            v=request.COOKIES.get('username111')
            if not v:
                return redirect('/login/')
            return func(request,*args,**kwargs)
        return inner
    @auth
    def index(request):
        # 获取当前已经登录的用户
        v=request.COOKIES.get('username111')
        return render(request,'index.html',{'current_user':v})
    
    from django import views
    from django.utils.decorators import method_decorator
    @method_decorator(auth,name
    ='dispatch') class Order(views.View): def get(self,request): v=request.COOKIES.get('username111') return render(request,'index.html',{'current_user':v}) def post(self,request): v=request.COOKIES.get('username111') return render(request,'index.html',{'current_user':v})

     举例:通过帐号登录服务器后,服务器端对cookie进行username标识,等客户端下一次访问时候,服务器端先提取cookie的username,如果不为空,表示为已登录帐号

     1 def login(request):
     2     if request.method=="GET":
     3         return render(request,'login.html')
     4     if request.method=="POST":
     5         u=request.POST.get('username')
     6         p=request.POST.get('pwd')
     7         dic=user_info.get(u)
     8         if not dic:
     9             return render(request,'login.html')
    10         if dic['pwd']==p:
    11             res= redirect('/index/')
    12             # res.set_cookie(key, value, ...),(键,值)
    13             res.set_cookie('username111',u,max_age=10)
    14             return res
    15         else:
    16             return render(request,'login.html')
    17 
    18 def index(request):
    19     # 获取当前已经登录的用户
    20     v=request.COOKIES.get('username111')
    21     if v:
    22         return render(request,'index.html',{'current_user':v})
    23     return redirect('/login/')
  • 相关阅读:

    链表
    队列
    稀疏数组
    SQL——流程控制
    SQL——存储过程与函数
    SOA
    MVC模式
    《一线架构师实践指南》--阅读笔记三
    《一线架构师实践指南》-阅读笔记二
  • 原文地址:https://www.cnblogs.com/Wang-Wenhui/p/9196238.html
Copyright © 2020-2023  润新知