Django基础之(8)- Cookie、Session和自定义分页
1|0一、cookie
1|11.1 cookie的由来
HTTP协议是无状态
的。
无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况。
一句有意思的话来描述就是人生只如初见,对服务器来说,每次的请求都是全新的。
状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被保留。会话中产生的数据又是我们需要保存的,也就是说要保持状态
。因此Cookie就是在这样一个场景下诞生。
1|21.2 什么是cookie
Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息。
1|31.3 cookie的原理
cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上Cookie,这样服务器就能通过Cookie的内容来判断这个是“谁”了。
1|41.4 查看cookie
我们使用Chrome浏览器,打开开发者工具。
2|0二、Django中操作Cookie
2|12.1 获取Cookie
参数:
- default: 默认值,默认如果获取不到直接报错
- salt: 加密盐
- max_age: 后台控制过期时间,单位是秒
2|22.2 设置 Cookie
参数:
- 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获取(不是绝对,底层抓包可以获取到也可以被覆盖)
2|32.3 删除 Cookie
z装饰器版本Cookie登陆校验
3|0三、Session
3|13.1 Session 的由来
Cookie虽然在一定程度上解决了“保持状态”的需求,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存在客户端,可能被拦截或窃取,因此就需要有一种新的东西,它能支持更多的字节,并且他保存在服务器,有较高的安全性。这就是Session。
Session是什么
是保存在服务端的键值对
Session
必须依赖于Cookie
3|2Django 中Session做的事
存Session:
- 在服务端生成随机字符串
- 生成一个和上面随机字符串对应的大字典,用来保存用户的数据(保存在自动生成的django_session表中)
- 随机字符串当成cookie 返回给浏览器
取Session:
- 从请求携带的Cookie里面找到 随机字符串
- 拿到随机字符串去 session 中找对应的大字典
- 从大字典中根据 key 取值
Session的优势:
- 比Cookie能存的数据多
- 安全性好,数据都保存在服务端
Session的缺点:
- Session数据量大,会占用一些资源
3|3Session 的表结构
3|43.2 Django中的Session相关方法
3|53.3 Session 流程解析
3|63.4 Session版登陆验证
3|73.5 Django 中的 Session配置
Django中默认支持 Session,其内部提供了 5 种类型的 Session供开发者使用
3|83.6 CBV中加装饰器相关
CBV实现的登录视图
要在CBV视图中使用我们上面的check_login装饰器,有以下三种方式:
3.6.1 加在CBV视图的get或post方法上
3.6.2 加在dispatch方法上
因为CBV中首先执行的就是dispatch方法,所以这么写相当于给get和post方法都加上了登录校验。
3.6.3 直接加在视图类上,但method_decorator必须传 name 关键字参数
如果get方法和post方法都需要登录校验的话就写两个装饰器。
3|93.7 补充
CSRF Token相关装饰器在CBV只能加到dispatch方法上,或者加在视图类上然后name参数指定为dispatch方法。
备注:
- csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。
- csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。
或者
4|0四、分页
当数据库中数据有很多,我们通常会在前端页面做分页展示。
分页的数据可以在前端页面实现,也可以在后端实现分页。
后端实现分页的原理就是每次只请求一页数据。
准备工作
我们使用脚本批量创建一些测试数据(将下面的代码保存到 bulk_create.py
文件中放到 Django
项目的根目录,直接执行即可。):
4|14.1 自定义分页
稳扎稳打版
4|24.2 封装保存版
4|34.3 封装保存版使用示例
4|44.4 Django 内置分页
前端
__EOF__

本文链接:https://www.cnblogs.com/dongye95/p/14617551.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!