| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> Django的中间件、Cookie、Session -> 正文阅读 |
|
[Python知识库]Django的中间件、Cookie、Session |
1. 中间件????????Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,并用于修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。 ? ? ? ? Django的中间件预置了五个方法: ????????(1)方法一:__init__()初始化方法,无需任何参数,服务器响应第一个请求时则调用一次,用于确定是否启用了当前中间件,如下:
????????(2)方法二:处理请求前的process_request()方法,在每个请求上,request对象产生之后,url匹配之前调用,返回None或HttpResponse对象,如下:
????????(3)方法三:处理视图前的process_view()方法,在每个请求上,url匹配之后,视图函数调用之前调用,返回None或HttpResponse对象,如下:
????????(4)方法四:处理响应后的process_response()方法,视图函数调用之后,所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象,如下:
????????(5)方法五:异常处理的process_exception()方法,当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象,如下:
? ? ? ? 注意,若在自定义中间件中仅有__init__()初始化方法而未定义__call__()方法,则通常报错如下:
? ? ? ? 创建中间件类的时候要继承‘MiddlewareMixin’类
? ? ? ?创建的中间件要添加到主目录下的settings.py中的‘MIDDLEWARE’中,否则无法生效 ? ? ? ? 中间件的应用场景:路由拦截、封禁IP等等 2. Cookie? ? ? ? 状态保持: ????????实际上,浏览器与服务器之间是使用Socket套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的Socket连接,而且服务器也会在处理页面完毕之后销毁页面对象。有时候,开发者需要保存用户浏览的状态,例如用户是否登录过、浏览过哪些商品等。要实现状态保持主要有两种方式,分别是:①在客户端存储信息使用Cookie;②在服务器端存储信息使用Session。 ????????Cookie有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。 ????????正常情况下,Cookie的特点主要有以下几点: ????????(1)Cookie以键值对的格式进行信息的存储,例如BIDUPSID=AD2A7EBE88E19663FC6112407119C266、PSTM=1521183013等; ????????(2)Cookie基于域名安全,不同域名的Cookie是不能互相访问的,例如访问baidu.com时向浏览器中写了Cookie信息,使用同一浏览器访问alibaba.com时,则无法访问到baidu.com写的Cookie信息; ????????(3)当浏览器请求某网站时,会将浏览器存储的跟网站相关的所有Cookie信息提交给网站服务器。 ????????针对Cookie的这些特点,其中一个非常典型应用如记住用户名,进而进行网站的广告推送 ????????若要设置Cookie值,则要使用到HttpResponse类的如下函数:
????????下面来使用Django读取Cookie值。Cookie信息是被包含在请求头中,可以使用request对象的COOKIES属性访问,如下:
????????还需要使用到HttpResponse类的如下函数:
? ? ? ? Cookie的过期时间:? ? ?????????
????????Cookie的存储大小:
3. Session????????实际开发应用中,对于敏感、重要的信息,建议要存储在服务器端,而不能存储在浏览器(客户端)中,如用户名、余额、等级、验证码等信息。通常情况下,在服务器端进行状态保持的方案就是Session。 ????????Django项目中是默认启用Session的 ?????????若要查看session的具体存储方式,则需要打开项目主目录下的settings.py文件,并设置SESSION_ENGINE项来指定Session数据存储的方式,可以存储在数据库、缓存、Redis等。 ????????(1)存储在数据库中,如下设置可以写,也可以不写,这是默认存储方式,如下:
????????(2)存储在缓存中,即存储在本机内存中,若丢失则不能找回,此方式比数据库存储的方式读写更快,如下:
????????(3)混合存储,优先从本机内存中存取,若没有则从数据库中存取,如下:
????????(4)若存储在数据库中,需要在INSTALLED_APPS项中来安装Session应用,如下: ?????????(5)当进行迁移文件后会在数据库中创建出存储Session的表,如下: ?????????(6)django_session数据表结构如下: ?????????操作Session包括三个数据字段,分别是键session_key、值session_data、过期时间expire_date。
? ? ? ? Session常用的对象和方法: ? ? ? ? 使用HttpRequest对象对session进行操作 ????????(1)以键值对的格式写入session,如下:
????????(2)根据键的get()方法读取值,如下:
????????(3)清除所有session,在存储中删除值的部分,如下:
????????(4)清除session数据,在存储中删除session的整条数据,如下:
????????(5)删除session中的指定键及值,在存储中只删除某个键及对应的值,如下:
????????(6)设置会话的超时时间,若未指定过期时间,则两周后自动过期,如下:
? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 4:49:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |