Django Cookie和Session使用(十一)

一、Cookie

Cookie具体指一小段信息,它是服务器发送出来存储在浏览器上的一组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息。

Cookie的特性

1、服务器让浏览器进行设置的

2、保存在浏览器本地,浏览器也可以不保存

3、下次访问自动携带cookie保存的信息

操作Cookie 

(1) 设置cookie

response.set_cookie(key,value)

(2) 获取cookie

request.COOKIES.get(key)

(3) 设置cookie的时候可以添加一个超时时间

response.set_cookie('userid', '2',max_age=7*24*300,expires=7*24*300)

max_age, expires
两者都是设置超时时间的 并且都是以秒为单位
需要注意的是 针对IE浏览器需要使用expires  

(4) 手动删除cookie(注销功能)

response.delete_cookie('userid')

二、Session

保存在服务器上的一组组键值对,必须依赖于Cookie

为何使用Session

1、cookie保存在浏览器本地不安全,

2、cookie的大小收到限制

操作Session

(1) session数据是保存在服务端的,给客户端返回的是一个随机字符串

#客户端
sessionid:随机字符串

 (2)设置session 

request.session['key'] = value

1.django内部会自动帮你生成一个随机字符串
2.django内部自动将随机字符串和对应的数据存储到django_session表中
        2.1先在内存中产生操作数据的缓存
        2.2在响应结果django中间件的时候才真正的操作数据库
3.将产生的随机字符串返回给客户端浏览器保存 

(3)设置过期时间

request.session.set_expiry(7*24*300)

 源码: 

 括号内可以放四种类型的参数

integer 整数 : 多少秒
datetime日期对象 : 到指定日期就失效
0 : 一旦当前浏览器窗口关闭立刻失效
不写 : 失效时间就取决于django内部全局session默认的失效时间

(4) 获取session

request.session.get('key')

(5) 清除session

    session_key=request.session.session_keyrequest.session.delete(session_key)
request.session.delete() # 只删服务端的 客户端的不删

三、登录中应用cookie和session

 (1) 模型数据

from django.db import models# Create your models here.
class UserModel(models.Model):username=models.CharField(max_length=30,unique=True)password=models.CharField(max_length=10)age=models.IntegerField(default=17)class Meta:db_table='user'verbose_name='用户'verbose_name_plural=verbose_name#记得迁移文件

 (2-1)首页

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>首页</title>
</head>
<body><h1>首页</h1><hr/>{% if user %}当前登录用户:<h3>{{ user.username }} <a href="{% url 'logout' %}">注销</a></h3>{% else %}<a href="{% url 'register' %}">注册</a><a href="{% url 'login' %}">登录</a>{% endif %}
</body>
</html>

(2-2)注册页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>注册</title>
</head>
<body><h1>注册</h1><hr/>
{#    表单提交#}<form action="" method="post">{% csrf_token %}<p>用户<input type="text" name="username"></p><p>密码<input type="password" name="password"></p><p>年龄<input type="text" name="age"></p><p><button>注册</button></p></form>
</body>
</html>

  (2-3)    登录页面

<body><h1>登录</h1><hr/><form action="" method="post">{% csrf_token %}<p>用户<input type="text" name="username"></p><p>密码<input type="password" name="password"></p><p><button>登录</button></p></form>
</body>

(3)路由

urlpatterns = [path('', index),  # 默认打开首页# 起别名path('index/', index, name='index'),path('login/', login, name='login'),path('register/', register, name='register'),path('logout/', logout, name='logout'),path('admin/', admin.site.urls),
]

(4)视图

from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.urls import reverse    #路由from user.models import *# Create your views here.
#首页
def index(request):#获取cookie数据# uid=request.COOKIES.get('userid',0)# 获取session数据uid = request.session.get('userid', 0)#获取登录的用户信息user = UserModel.objects.filter(id=uid).first()return render(request,"index.html",{'user':user})#注册
def register(request):#判断if request.method=='GET':return render(request,"register.html")elif request.method=='POST':#请求数据uname=request.POST.get('username')upass=request.POST.get('password')age=request.POST.get('age')print(uname,upass,age,sep='=======') #后台打印#先判断用户是否存在username=UserModel.objects.filter(username=uname)if username.exists():return HttpResponse('用户已存在!')#添加到数据库中try:user=UserModel()user.username=unameuser.password=upassuser.age=ageuser.save()except:return HttpResponse('注册失败!')#注册成功,直接跳到登录页面return redirect(reverse('login'))#登录
def login(request):# 判断if request.method == 'GET':return render(request, "login.html")elif request.method == 'POST':# 请求数据uname = request.POST.get('username')upass = request.POST.get('password')print(uname, upass, sep='=======')  # 后台打印#2.登录验证users=UserModel.objects.filter(username=uname,password=upass)#判断if users.exists():#获取数据user=users.first()#3.设置cookie#跳转到首页response=redirect(reverse('index'))#创建cookie,设置过期时间max_age=7天# response.set_cookie('userid',user.id,max_age=7*24*300)# response.set_cookie('userid',user.id)#使用sessionrequest.session['userid']=user.id#设置过期时间# request.session.set_expiry(7*24*300)return response#注销
def logout(request):# 跳转到首页response = redirect(reverse('index'))#删除cookie# response.delete_cookie('userid')# 删除sessionsession_key=request.session.session_keyrequest.session.delete(session_key)#返回return response

(5)运行

四、总结

cookie就是保存在客户端浏览器上的信息
session就是保存在服务端上的信息
session是基于cookie工作的(其实大部分的保存用户状态的操作都需要使用到cookie)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/226441.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 网络工具(二)

linux 网络工具 1. ip命令簇4.1 address4.2 link4.3 route4.4 rule 2. 其他常用命令2.1 ifup/ifdown2.2 配置主机名2.3 设置DNS服务器指向2.4 配置域名解析2.5 ss2.6 路由相关配置文件2.7 查看机器可用端口2.8 traceroute2.9 dhclient 1. ip命令簇 Linux的ip命令和ifconfig类似…

微信小程序picker组件扩展选择时间到秒插件

创建插件seldatetime // 插件JS部分 Component({// 一些选项options: {// 样式隔离&#xff1a;apply-shared 父影响子&#xff0c;shared父子相互影响&#xff0c; isolated相互隔离styleIsolation:"isolated",// 允许多个插槽multipleSlots: true},// 组件的对外属…

机器学习三要素与拟合问题

1.如何构建机器学习模型&#xff1f; 机器学习工作流程总结 1.获取数据 2.数据基本处理 3.特征工程 4.机器学习(模型训练) 5.模型评估 结果达到要求&#xff0c;上线服务&#xff0c;没有达到要求&#xff0c;重新上面步骤 我们使用机器学习监督学习分类预测模型的工作流…

SLF4J: Class path contains multiple SLF4J bindings.解决

背景 项目正常运行几年&#xff0c;近期优化调整修复漏洞&#xff0c;依赖升级后cleaninstall 重启发现项目启动失败&#xff0c;访问所有接口都报错404 错误信息 output输出异常信息截图 tomcat 打印异常信息截图 output打印异常信息详情 D:\javaRuanJian\Tomcat\apach…

人工智能的新篇章:深入了解大型语言模型(LLM)的应用与前景

LLM&#xff08;Large Language Model&#xff09;技术是一种基于深度学习的自然语言处理技术&#xff0c;旨在训练能够处理和生成自然语言文本的大型模型。 LLM 技术的核心思想是使用深度神经网络&#xff0c;通过大规模的文本数据预训练模型&#xff0c;并利用这些预训练模型…

linux 防火墙查看放行端口,追加放行端口命令

linux 查看防火墙已经放行端口列表 firewall-cmd --list-ports 运行结果如下&#xff1a; linux 追加防火墙经放行端口&#xff08;如追加443&#xff09; firewall-cmd --zonepublic --add-port443/tcp --permanent 亲测有效&#xff01;

【WPF.NET开发】路由事件

本文内容 先决条件什么是路由事件&#xff1f;路由策略为什么使用路由事件&#xff1f;附加并实现路由事件处理程序类处理程序WPF 中的附加事件XAML 中的限定事件名称WPF 输入事件EventSetter 和 EventTrigger Windows Presentation Foundation (WPF) 应用程序开发人员和组件…

FileZilla的使用主动模式与被动模式

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《产品经理如何画泳道图&流程图》 ⛺️ 越努力 &#xff0c;越幸运 目录 一、FileZilla简介 1、FileZilla是什么&#xff1f; 2、FileZilla的应用场景 二、FileZilla的安装 1、下…

【直播预告】刘军博士:科学研究中的AI计算:何助力团队协作创新

【直播预告】随着数据、算法、算力的融合发展&#xff0c;AI已经成为科学和工程研究的不可或缺的力量&#xff0c;涉足药物设计、天气预测、新材料研发等领域。在AI领域&#xff0c;协作是关键。欢迎大家关注12月28日20:00九章云极资深数据科学家刘军博士的直播&#xff01;刘军…

HLS 2017.4 导出 RTL 报错:ERROR: [IMPL 213-28] Failed to generate IP.

软件版本&#xff1a;HLS 2017.4 在使用 HLS 导出 RTL 的过程中产生如下错误&#xff1a; 参考 Xilinx 解决方案&#xff1a;https://support.xilinx.com/s/article/76960?languageen_US 问题描述 DESCRIPTION As of January 1st 2022, the export_ip command used by Vivad…

【计算机视觉】角点检测(Harris、SIFT)

Harris 角点指的是窗口延任意方向移动&#xff0c;都有很大变化量的点。 用数学公式表示为&#xff1a; E(u,v)反映的移动后窗口的差异&#xff0c;w(x,y)为每个像素的点权值&#xff0c;I(xu,yv)是移动的像素值&#xff0c;I(x,y)是移动前的像素值。 将E(u,v)进行泰勒展开&am…

MySQL进阶之(一)逻辑架构

一、逻辑架构 1.1 逻辑架构剖析1.1.1 连接层1.1.2 服务层01、基础服务组件02、SQL Interface&#xff1a;SQL 接口03、Parser&#xff1a;解析器04、Optimizer&#xff1a;查询优化器05、Caches & Buffers&#xff1a; 查询缓存组件 1.1.3 引擎层1.1.4 存储层1.1.5 总结 1.…

elasticsearch系列九:异地容灾-CCR跨集群复制

概述 起初只在部分业务中采用es存储数据&#xff0c;在主中心搭建了个集群&#xff0c;随着es在我们系统中的地位越来越重要&#xff0c;数据也越来越多&#xff0c;针对它的安全性问题也越发重要&#xff0c;那如何对es做异地容灾呢&#xff1f; 今天咱们就一起看下官方提供的…

25、商城系统(七):商城项目基础功能pom.xml(重要),mybatis分页插件

截止这一章,我们就不把重心放在前端,后台的基础代码,因为后面都是业务层面的crud。 前端直接替换这两个文件夹即可,后台代码也直接复制: 一、重新更新一下所有的pom.xml 这个地方我踩了好多坑,最后得到一个完整的pom.xml,建议大家直接用我的pom.xml替换即可。 1.comm…

大数据与人工智能|万物皆算法(第三节)

要点一&#xff1a;数据与智能的关系 1. 一切的核心都是数据&#xff0c;数据和智能之间是密切相关的。 数据是对客观现实的描述&#xff0c;而信息是数据转化而来的。 例如&#xff0c;24是数据&#xff0c;但说“今天的气温是24摄氏度”是信息&#xff0c;而说“班可以分成24…

How to Develop Word Embeddings in Python with Gensim

https://machinelearningmastery.com/develop-word-embeddings-python-gensim/ 本教程分为 6 个部分;他们是&#xff1a; 词嵌入 Gensim 库 开发 Word2Vec 嵌入 可视化单词嵌入 加载 Google 的 Word2Vec 嵌入 加载斯坦福大学的 GloVe 嵌入 词嵌入 单词嵌入是一种提供单词的…

web自动化(4)——POM设计重构

1. 什么是POM Page Object Model 是ui自动化测试中常见的封装方式。 原理&#xff1a;将页面封装为PO对象&#xff0c;然后通过面向对象的方式实现UI自动化 2. 封装原则 PO无需包含全部UI元素PO应当验证元素PO不应该包含断言PO不应该暴露元素 3. 怎么进行POM封装 面向对象…

IntelliJ IDE 插件开发 | (四)开发一个时间管理大师插件

系列文章 IntelliJ IDE 插件开发 |&#xff08;一&#xff09;快速入门IntelliJ IDE 插件开发 |&#xff08;二&#xff09;UI 界面与数据持久化IntelliJ IDE 插件开发 |&#xff08;三&#xff09;消息通知与事件监听IntelliJ IDE 插件开发 |&#xff08;四&#xff09;开发一…

Flink1.17实战教程(第四篇:处理函数)

系列文章目录 Flink1.17实战教程&#xff08;第一篇&#xff1a;概念、部署、架构&#xff09; Flink1.17实战教程&#xff08;第二篇&#xff1a;DataStream API&#xff09; Flink1.17实战教程&#xff08;第三篇&#xff1a;时间和窗口&#xff09; Flink1.17实战教程&…

【51单片机系列】DS18B20温度传感器扩展实验之设计一个智能温控系统

本文是关于DS18B20温度传感器的一个扩展实验。 文章目录 一、相关元件介绍二、实验分析三、proteus原理图设计四、软件设计 本扩展实验实现的功能&#xff1a;利用DS18B20设计一个智能温度控制系统&#xff0c;具有温度上下限值设定。当温度高于上限值时&#xff0c;电机开启&a…