Django入门到放弃之cookies

1.获取Cookie

1
2
3
4
5
6
7
request.COOKIES
request.COOKIES['key']
# 获取带签名的cookie
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None#获取signed类型cookies
      default: 默认值
      salt: 加密盐
      max_age: 后台控制过期时间

2.设置Cookie

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
rep = HttpResponse(...)
rep = render(request, ...)
 
rep.set_cookie(key,value,...)
# 带签名的cookie
rep.set_signed_cookie(key,value,salt='加密盐', max_age=None, ...)
return rep
    参数:
      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传输
      httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

3.删除Cookie

1
2
3
4
def logout(request):
    rep = redirect("/login/")
    rep.delete_cookie("user"# 删除用户浏览器上之前设置的usercookie值,实质是将浏览器的cookies清空
    return rep

4.django中cookie的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 0 会话跟踪,会话保持
# 1 cookie规范
    -记住:当前网站在浏览器上cookie个数和大小有限制
    -Cookie大小上限为4KB
    -一个服务器最多在客户端浏览器上保存20个Cookie;
    -一个浏览器最多保存300个Cookie;
# 2 django中操作cookie
    -增:obj.set_cookie('key','value')
    -删: obj.delete_cookie('key'# 设置过期
    -查: request.COOKIES.get('key')
    -改: obj.set_cookie('key','value1')
# 3 带签名的cookie(加盐,加密)
    -增:obj.set_signed_cookie('name','lqz','123')
    -删: obj.delete_cookie('name'# 设置过期
    -查: request.get_signed_cookie('name',salt='123')
    -改: obj.set_signed_cookie('name','lqz','123')

5.登录认证示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
def login_auth(func):
    def inner(request,*args,**kwargs):
        is_login = request.COOKIES.get('is_login')
        print(is_login)
        if is_login == 'True':
            res = func(request,*args,**kwargs)
            print('##############################')
            return res
        else:
             
            return redirect('login')
    return inner
 
@login_auth
def index(request):
        return render(request, 'cookies/index.html')
 
 
@login_auth
def home(request):
        return render(request, 'cookies/home.html')
 
 
 
def login(request):
    if request.method == 'GET':
        return render(request, 'cookies/login.html')
    else:
        username = request.POST.get('username')
        password = request.POST.get('password')
 
        if username == 'bge' and password == '666':
            path = request.GET.get('returnurl')
            if path:
                ret = redirect(path})
            else
                ret = redirect('index')
            ret.set_cookie('is_login',True)
            return ret
        else:
            return HttpResponse('登录失败')

  

 

posted @   百衲本  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
历史上的今天:
2020-08-27 Linux 五种IO模型
cnblogs_post_body { color: black; font: 0.875em/1.5em "微软雅黑" , "PTSans" , "Arial" ,sans-serif; font-size: 15px; } cnblogs_post_body h1 { text-align:center; background: #333366; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 23px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h2 { text-align:center; background: #006699; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 20px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h3 { background: #2B6695; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 18px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } 回到顶部 博客侧边栏 回到顶部 页首代码 回到顶部 页脚代码
点击右上角即可分享
微信分享提示