zoukankan      html  css  js  c++  java
  • Cookie 简单设置使用

    cookie的理解可以为,存放在用户浏览器上的一个文件,里面是键值对数据,用于跟服务端通讯。前端可以通过jquery cookie插件设置和读取,后端直接设置

    1、获取Cookie:

    1
    2
    3
    4
    5
    6
    request.COOKIES['key']
    request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
        参数:
            default: 默认值
               salt: 加密盐
            max_age: 后台控制过期时间

    2、设置Cookie:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    rep = HttpResponse(...) 或 rep = render(request, ...)
     
    rep.set_cookie(key,value,...)
    rep.set_signed_cookie(key,value,salt='加密盐',...)
        参数:
            key,              键
            value='',         值
            max_age=None,     超时时间
            expires=None,     超时时间(IE requires expires, so set it if hasn't been already.)按日期时间算
            path='/',         Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问
            domain=None,      Cookie生效的域名
            secure=False,     https传输,网站走https时要加上
            httponly=False    只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

    由于cookie保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie,如设置和获取。

    后端设置加密的cookie:

    res=redirect('/home')
    res.set_signed_cookie('user1',u,max_age=5,salt='123')
    后端获取加密cookie:
    v = request.get_signed_cookie(key='user1',salt='123')

    简单例子:

    views:

     1 from django.shortcuts import render,HttpResponse,redirect
     2 
     3 dic = {
     4     "tom":{"pwd":'123'},
     5     "lily":{"pwd":'111'}
     6 }
     7 def login(request):
     8     if request.method=="GET":
     9         return render(request,'login.html')
    10     u=request.POST.get('user')
    11     pwd=request.POST.get('pwd')
    12     if dic.get(u):
    13         if dic[u]["pwd"]==pwd:
    14             res=redirect('/home')
    15             # res.set_cookie('user1',u)  #不设置缓存有效时间,浏览器重启后失效
    16             # res.set_cookie('user1',u,max_age=5)  #设置max_age指定多少秒后失效
    17             import datetime
    18             curr_time=datetime.datetime.now()
    19             expire_time=curr_time + datetime.timedelta(seconds=5)
    20             print(curr_time,expire_time)
    21             res.set_cookie('user1',u,expires=expire_time)  #设置max_age指定多少秒后失效
    22             return res
    23     else:
    24         return redirect('/login')
    25     return redirect('/login')
    26 
    27 def home(request):
    28     v = request.COOKIES['user1']
    29     if not v:
    30         return render(request,'login.html')
    31 
    32 
    33     return render(request,'home.html',{"curr_user":v})
    View Code

    templates:

     1 login.html
     2 <!DOCTYPE html>
     3 <html lang="en">
     4 <head>
     5     <meta charset="UTF-8">
     6     <title>Title</title>
     7 </head>
     8 <body>
     9 <form action="/login" method="post">
    10     <input type="text" name="user" placeholder="用户名" />
    11     <input type="text" name="pwd" placeholder="密码" />
    12     <input type="submit"/>
    13 </form>
    14 </body>
    15 </html>
    16 
    17 home.html
    18 <!DOCTYPE html>
    19 <html lang="en">
    20 <head>
    21     <meta charset="UTF-8">
    22     <title>Title</title>
    23 </head>
    24 <body>
    25 <h1>欢迎你,{{ curr_user }}</h1>
    26 </body>
    27 </html>
    View Code

     额外功能views:

    def page(request):
        list = []   #生成要发给前端的数据列表
        for i in range(1,779):
            list.append(i)
    
        cur_page = request.GET.get('page')
        if not cur_page:
            cur_page = 1
        else:
            cur_page = int(cur_page)
    
        obj = paginations.page_mod(data=list,cur_page=cur_page,dis_count=10,tray_len=7)
        data = obj.per_page_data    #分页后的内容
        nav_str = obj.page_str("/page")   #分布后的导航
    
        return render(request,'page.html',{'list':data,'dis_list':nav_str})
    dic = {
        "tom":{"pwd":'123'},
        "lily":{"pwd":'111'}
    }
    def login(request):
        if request.method=="GET":
            return render(request,'login.html')
        u=request.POST.get('user')
        pwd=request.POST.get('pwd')
        if dic.get(u):
            if dic[u]["pwd"]==pwd:
                res=redirect('/home')
                res.set_cookie('user1',u)  #不设置缓存有效时间,浏览器重启后失效
                # res.set_cookie('user1',u,max_age=5)  #设置max_age指定多少秒后失效
                res.set_cookie('user1',u,path='/home')  #设置生效url,只在规定uri路径下才能获取当前设置的cookie
                # import datetime
                # curr_time=datetime.datetime.now()
                # expire_time=curr_time + datetime.timedelta(seconds=5)
                # print(curr_time,expire_time)
                # res.set_cookie('user1',u,expires=expire_time)  #设置max_age指定多少秒后失效
                return res
        else:
            return redirect('/login')
        return redirect('/login')
    
    def home(request):
        v = request.COOKIES.get('user1')
        if not v:
            return render(request,'login.html')
    
        return render(request,'home.html',{"curr_user":v})
    

      ...

  • 相关阅读:
    合同主体列表添加两条合同主体,返回合并支付页面,支付总弹"请选择合同主体",删除后,竟然还能支付(改合并支付页面的字段状态)
    (TODO:)下载图片,报错:warning: could not load any Objective-C class information from the dyld shared cache. This will significantly reduce the quality of type information available.
    GCD死锁 多线程
    iOS知识总结
    快速排序,冒泡排序,选择排序
    fight
    3D Touch
    Xcode 调试技巧
    右滑退出手势及隐藏导航栏存在的风险
    C语言-第5课
  • 原文地址:https://www.cnblogs.com/alex-hrg/p/10225192.html
Copyright © 2011-2022 走看看