首页 > 其他分享 >django中cookie的使用

django中cookie的使用

时间:2023-12-19 17:22:21浏览次数:34  
标签:obj name request django cookie 使用 return login

cookie是在客户端的键值对

 

 

# 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')

 

 

2 cookie版登陆校验例

路由:

# cookie版登录
path('login/', views.login),
path('order/', views.order),
path('logout/', views.logout),
path('userinfo/', views.userinfo),

视图函数:

## 登录认证装饰器

def login_auth(func):
    def inner(request, *args, **kwargs):
        # 登录校验
        name = request.COOKIES.get('name')
        if name:
            res = func(request, *args, **kwargs)
            return res
        else:
            path = request.get_full_path()
            return redirect('/login/?returnUrl=%s' % path)

    return inner


### cookie版登录
def login(request):
    if request.method == 'GET':

        return render(request, 'login.html')
    else:
        name = request.POST.get('name')
        password = request.POST.get('password')
        if name == 'lqz' and password == '123':
            # 写入cookie
            # 登录成功,重定向
            path = request.GET.get('returnUrl')
            if path:
                obj = redirect(path)
            else:
                obj = redirect('/index/')
            obj.set_cookie('name', name)
            return obj
        else:
            return HttpResponse('用户名或密码错误')


# def order(request):
#     name = request.COOKIES.get('name')
#     if name:
#         return render(request,'order.html')
#     else:
#         return redirect('/login')

## 装饰器版本(只要加了装饰器,一旦进入这个视图函数,就表明登录成了)
@login_auth
def order(request):
    return render(request, 'order.html')


@login_auth
def userinfo(request):
    return render(request, 'userinfo.html')


def logout(request):
    obj = HttpResponse('退出登录成功')
    obj.delete_cookie('name')
    return obj

模板:login.html:

<form action="" method="post">
    <p>用户名:<input type="text" name="name"></p>
    <p>密码:<input type="password" name="password"></p>
    <p><input type="submit" value="提交"></p>
</form>

order.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="/logout/">点我退出</a>
</body>
</html>

userinfo.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>用户信息页面</h1>
</body>
</html>

 

标签:obj,name,request,django,cookie,使用,return,login
From: https://www.cnblogs.com/97zs/p/17914254.html

相关文章

  • Java Properties配置文件使用方法入门详解​
    JavaProperties配置文件使用方法详解使用配置文件的优点:好处1:可以把软件的设置永久化存储好处2:如果我们要修改参数,不需要改动代码,直接修改配置文件就可以了Properties配置文件文件后缀名为.properties,其内容是按键值对存储的。前面为键,后面为值。properties是一个双列集合,拥有Ma......
  • SpringBoot中使用Aspect实现切面
    相关概念切面(Aspect):首先要理解‘切’字,需要把对象想象成一个立方体,传统的面向对象变成思维,类定义完成之后(封装)。每次实例化一个对象,对类定义中的成员变量赋值,就相当于对这个立方体进行了一个定义,定义完成之后,就等着被使用,等着被回收。面向切面编程则是指,对于一个我们已经封装......
  • 微信小程序使用iconfont通过transfonter转化成只有css样式的方式
    1.通过iconfont 网站选择对应图表加入购物车,然后添加到自己对应项目中,现在至本地。2.解压下载到本地的文件 3.进入 transfonter 后,点击Addfonts按钮,将上图中红色框中的文件上传上去,勾选启用 Base64encode ,点击Convert按钮,完成后点击下载Download 4.解压转......
  • DC电源模块的安装和使用步骤是什么?
    DC电源模块的安装和使用步骤是什么?安装和使用DC电源模块的步骤如下:确定模块的电源需求:查阅模块的规格和说明书,确定所需的输入电压范围和输出电流能力。配置电源线:根据电源模块的输入要求,选择合适的电源线。确保电源线具备足够的额定电流和正确的接线方式。连接电源线:将电源线的一......
  • 最近在使用SpringBoot整合MyBatis-Plus时出现的问题
    版本信息:IDEA2022、jdk17、maven3.8.6、SpringBoot3+MyBatis-Plus依赖版本信息:<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3</version&g......
  • BOSHIDA DC电源模块的安装和使用步骤是什么?
    BOSHIDADC电源模块的安装和使用步骤是什么?安装和使用DC电源模块的步骤如下: 1.确定模块的电源需求:查阅模块的规格和说明书,确定所需的输入电压范围和输出电流能力。2.配置电源线:根据电源模块的输入要求,选择合适的电源线。确保电源线具备足够的额定电流和正确的接线方式。3......
  • qiankun实例化使用
    一、qiankun使用场景1. 简介:qiankun是在single-spa的基础上实现的,可以保证各个项目独立使用,也可以集成使用。各系统之间不受技术栈的限制,集成使用也能保证各样式和全局变量的隔离。模块的插拔式使用,当公司项目集是一个大系统下包含多个子系统或者模块时,可以采......
  • MegEngine 优化 dataloader 使用体验!data monitor 帮助更好定位性能瓶颈
    业务模型训练中Data部分可能是瓶颈所在在训练业务模型过程中,如果我们发现模型的训练速度不符合预期,往往会下意识地认为网络本身出了问题。但实际上,大多数时候问题发生在模型的数据供给逻辑中。区分一个训练过程的瓶颈到底是在准备数据,还是在网络的计算阶段其实是很简单的。比......
  • 解决安卓设备无法使用authenticator app问题
    今天要说的是微软的authenticatorapp在中国的使用问题,众所周知的是,微软和很多厂商现在都在大力推广passwordless的身份验证方式,认为username和password已经不再安全,属于要慢慢摒弃的旧方法,至于哪些身份验证方式比较安全,微软心目中认定的身份验证的级别可以参考下图可以看到authent......
  • 使用XPath进行网页爬取的Python实现
    XPath是一种用于在XML和HTML文档中进行导航和查询的语言。在网页爬取中,XPath可以帮助我们定位和提取特定的网页元素,从而实现数据的抓取和提取。本文将介绍如何使用Python中的XPath库来进行网页爬取。1.安装依赖库:在使用XPath进行网页爬取之前,我们需要安装相关的依赖库。Python中常......