Django之Cookie

Django之Cookie

目录

介绍

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

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

Django操作Cookie

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

设置Cookie

python 复制代码
def test(request):
    # response设置为响应对象
    response = HttpResponse()
    # 为该对象绑定Cookie并赋值
    response.set_cookie('name','Paul')
    # 将有Cookie的响应对象返回给web端
    return response
浏览器查看Cookie

获取Cookie

python 复制代码
def test2(request):
    my_cookie = request.COOKIES.get('name')
    print(my_cookie)
    return HttpResponse('ok')
python 复制代码
# 输出:Paul

设置超时Cookie

python 复制代码
# 设置超时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')
python 复制代码
# 输出:Paul
# 	   None

注销Cookie

python 复制代码
def test2(request):
    # 将浏览器重定向的同时注销Cookie
    response = redirect('home')
    response.delete_cookie('name')
    return response

模拟登录验证

python 复制代码
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('请先登录')

登录验证装饰器

python 复制代码
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')

登录验证装饰器-升级版

python 复制代码
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界面')
相关推荐
刀客1234 分钟前
python3+TensorFlow 2.x(四)反向传播
人工智能·python·tensorflow
stevewongbuaa19 分钟前
一些烦人的go设置 goland
开发语言·后端·golang
sysu631 小时前
95.不同的二叉搜索树Ⅱ python
开发语言·数据结构·python·算法·leetcode·面试·深度优先
SsummerC2 小时前
【leetcode100】从前序与中序遍历序列构造二叉树
python·算法·leetcode
陌北v12 小时前
PyTorch广告点击率预测(CTR)利用深度学习提升广告效果
人工智能·pytorch·python·深度学习·ctr
Мартин.2 小时前
[Meachines] [Easy] Bashed PHP Bash+Python计划任务权限提升
python·php·bash
码界筑梦坊3 小时前
基于Flask的旅游系统的设计与实现
python·flask·毕业设计·旅游
辞落山3 小时前
自定义数据集使用scikit-learn中的包实现线性回归方法对其进行拟合
python·线性回归·scikit-learn
花心蝴蝶.4 小时前
Spring MVC 综合案例
java·后端·spring
落霞的思绪4 小时前
Redis实战(黑马点评)——关于缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、Redis工具)
数据库·spring boot·redis·后端·缓存