• Django之Cookie


    Django之Cookie

    介绍

    当我们上网使用社交媒体或者购物时,浏览器需要通过一种方式来记住我们。想象一下你进入一家商店,店员会将一张带有身份信息的会员卡片递给你,并让你每次进店时都将卡片带在身上,这张小卡片就是Cookie

    Cookie是由服务器发送到用户的浏览器中的小型文本文件,它存储在用户的计算机上,方便用户每次访问同一个浏览器页面时能够让服务器对其识别

    Django操作Cookie

    三板斧中的redirect HttpResponse render对象都可以操作Cookie

    设置Cookie

    def test(request):
        # response设置为响应对象
        response = HttpResponse()
        # 为该对象绑定Cookie并赋值
        response.set_cookie('name','Paul')
        # 将有Cookie的响应对象返回给web端
        return response
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    浏览器查看Cookie

    image-20240311151248283

    获取Cookie

    def test2(request):
        my_cookie = request.COOKIES.get('name')
        print(my_cookie)
        return HttpResponse('ok')
    
    • 1
    • 2
    • 3
    • 4
    # 输出:Paul
    
    • 1

    设置超时Cookie

    # 设置超时Cookie
    def test(request):
        response = HttpResponse()
        response.set_cookie('name', 'Paul',max_age=5)
        return response
    
    # 间隔五秒获取两次Cookie
    def test2(request):
        my_cookie = request.COOKIES.get('name')
        print(my_cookie)
        time.sleep(5)
        print(my_cookie)
        return HttpResponse('ok')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    # 输出:Paul
    # 	   None
    
    • 1
    • 2

    注销Cookie

    def test2(request):
        # 将浏览器重定向的同时注销Cookie
        response = redirect('home')
        response.delete_cookie('name')
        return response
    
    • 1
    • 2
    • 3
    • 4
    • 5

    模拟登录验证

    def test(request):
        form_obj = UserForm()
        user = request.POST.get('user')
        pwd = request.POST.get('pwd')
        if user =='123123' and pwd == '123123':
            response = HttpResponse('登录成功')
            response.set_cookie('user','123123')
            return response
        return render(request,'app01/register.html',locals())
    
    
    def test2(request):
        response = redirect('home')
        if request.COOKIES.get('user'):
            return response
        return HttpResponse('请先登录')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    登录验证装饰器

    def check_cookie(func):
        def inner(request, *args, **kwargs):
            if request.COOKIES.get('user'):
                res = func(request, *args, **kwargs)
                return res
            else:
                return HttpResponse('请先登录')
        return inner
    
    @check_cookie
    def test2(request):
        response = redirect('home')
        return render(request, 'app01/home.html')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    登录验证装饰器-升级版

    def login(request):
        form_obj = UserForm()
        user = request.POST.get('user')
        pwd = request.POST.get('pwd')
        if user == '123123' and pwd == '123123':
        	# 获取Cookie后直接重定向到url中next的路由,如果没有则返回home
            response = redirect(request.GET.get('next', 'home'))
            response.set_cookie('user', '123123')
            return response
        return render(request, 'app01/register.html', locals())
    
    
    def check_cookie(func):
        def inner(request, *args, **kwargs):
            target_url = request.get_full_path()
            if request.COOKIES.get('user') == '123123':
                res = func(request, *args, **kwargs)
                return res
            else:
                return redirect(f'/app01/test/?next={target_url}')
    
        return inner
    
    
    @check_cookie
    def home(request):
        return HttpResponse('这里是home界面')
    
    • 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
  • 相关阅读:
    【C语言经典100例题-70】求一个字符串的长度(指针)
    python元组与列表的区别
    网易面试总结——面试案例5~面试案例8
    iOS Masonry使用小结
    SQL Server Not Null约束
    文心一言插件开发全流程,ERNIE-Bot-SDK可以调用文心一言的能力
    UI for Apache Kafka
    DP 优化小技巧
    前端实现文件预览(pdf、excel、word、图片)
    Qt学习20 Qt 中的标准对话框(中)
  • 原文地址:https://blog.csdn.net/AZURE060606/article/details/136660151