Django之五种中间件定义类型—process_request、process_view、process_response.......

目录

1. 前言

2. 基础中间件

3. 如何自定义中间件

4. 五种自定义中间件类型

4.1 process_request

4.2 process_view

4.3 process_response

4.4 process_exception

4.5 process_template_response

5. 最后

1. 前言

哈喽,大家好,我是小K,今天咋们分享的内容是:Django中的五种自定义中间件类型

在Django中,有一种特殊的存在,那就是中间件

中间件是一种轻量化可复用的Django组件,可以在请求之前、之后、视图之前或者响应之后作出一些动作,例如身份验证或者限流等。

本篇文章带你学会五种自定义中间件类型:

process_request、process_view、process_response、process_exception、process_template_response

2. 基础中间件

在学习自定义中间件时,我们先来看Django中已有的中间件:

  1. django.middleware.security.SecurityMiddleware: 这是Django的安全中间件,用于实施各种安全策略,例如设置HTTP头部以防止一些类型的攻击。

  2. django.contrib.sessions.middleware.SessionMiddleware: 这是用于处理会话的中间件,它允许您在请求之间存储和检索数据。

  3. django.middleware.common.CommonMiddleware: 这个中间件处理一般的HTTP请求和响应,例如添加适当的头部信息、处理URL重定向等。

  4. django.middleware.csrf.CsrfViewMiddleware: 这是用于处理跨站请求伪造保护的中间件,它确保每个POST请求都包含有效的CSRF令牌。

  5. django.contrib.auth.middleware.AuthenticationMiddleware: 这个中间件用于处理用户身份验证,它将用户对象添加到每个请求。

  6. django.contrib.messages.middleware.MessageMiddleware: 这个中间件用于处理Django消息框架中的消息。

  7. django.middleware.clickjacking.XFrameOptionsMiddleware: 这个中间件用于设置X-Frame-Options头,以防止点击劫持攻击。

3. 如何自定义中间件

在了解基础中间件之后,我们来看看如何自定义中间件:

我们可以随便创建一个文件,下面创建一个自定义模块:

在这个模块中,我们单独定义类:

先不看具体的代码

from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixinclass AuthenticateUser(MiddlewareMixin):def process_request(self, request):# request是请求相关所有的数据if request.GET.get("token") == '123456':  # 判断用户是否携带token,也就是是否登录request.role = 'user'  # 当前角色为普通用户returnreturn HttpResponse('出错了')def process_view(self, request, view, *args, **kwargs):# request是请求相关所有的数据; view是试图函数; 路由参数*args, **kwargsif 'admin' in request.path_info.split('/')[1] and request.role == 'user':  # 如果当前url以admin开头的话,用户是无权限访问的return HttpResponse("无权限访问")returndef process_response(self, request, response):# request是请求相关所有的数据# response是试图函数返回的那个对象(封装了要返回到用户浏览器的所有数据)response['name'] = 'jiaoxingk'  # 在返回的时候,加入一些返回值信息return responsedef process_exception(self, request, exception):print(request)print(exception, type(exception))return HttpResponse("错误了")def process_template_response(self, request, response):response.body = 'hello'return response

接着,我们需要注册中间件,也就是通过字符串路径的形式,进行动态导入

不知道为什么通过字符串可以动态导入的原理的话,可以参考我的这篇文章:

Python中的反射——getattr与动态导入模块

 

4. 五种自定义中间件类型

ok, 现在我们来具体看看以上自定义中间件的具体代码:

4.1 process_request

这是在请求到来之后,所执行的操作。

请求一来,最先做的应该是匹配相应的视图函数,而加上process_request,就代表在匹配之前,就截停了请求,开始执行操作

校验token,看是否登录(假装123456代表用户登录了)

如果登录了,就给该用户的角色定义为普通用户,然后返回空值,代表继续执行匹配

如果没有就提前截停请求,直接返回响应

4.2 process_view

此时,请求已经匹配到相应的视图函数,但是在执行视图函数之后,又做了一次操作:

这里,判断url的前缀是不是admin(管理员才能访问的),如果你只是普通用户的话,那么会没有权限继续访问了。

因此,这里就提前截停,返回值

4.3 process_response

现在,视图函数也已经执行完了,该返回给浏览器了

在返回之前,我加了一条响应信息,代表我当前的一个记录

这是浏览器里面可以看到的:

4.4 process_exception

如果在执行视图的时候,出现了异常,那么就会执行这里的语句:

 

4.5 process_template_response

这个比较特殊,主要对于视图函数返回内容渲染扩展。

 

 process_template_response的调用前提是:

1. 在视图函数中如果返回的对象内部有一个render方法且可以被调用执行
2. process_template_response返回response参数(返回值)
3. 在自定义的MyReponse的render方法中必须返回HttpRespose

 基本不常用这个。

5. 最后

好了,今日的中间件分享就到这里吧。

对于后两个中间件类型,一般是不常用的,主要还是process_requestprocess_viewprocess_response这三种用的比较多

了解到中间件的基础用法之后,咋们下一节开始深入研究它的底层源码啦,看看中间件到底是如何加载并且运行的。

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

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

相关文章

openhomeny鸿蒙arkts笔记

基于api9,创建arkts file,之前是java或者kotlin代码,转鸿蒙代码的一些笔记 1、final用readonly代替 2、Exception用Error代替 3、String用string代替 4、int,long,float,double等用number代替 5、要给…

探索GlassWire:网络安全与流量监控软件

名人说:东边日出西边雨,道是无晴却有晴。——刘禹锡 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、软件介绍1、GlassWire(免费版本)2、核心特点二、下载安装① 下载(免费版本)② 安装三、使用方法①如何使用?②语言切换③流量监控四、总结

Pytest教程:一文了解如何使用 pytest_runtest_makereport 修改 Pytest 测试报告内容

在软件测试过程中,生成清晰、易读的测试报告对于团队交流、问题追踪和项目进度评估至关重要。Pytest 是一个功能强大的 Python 测试框架,它不仅支持丰富的断言和测试用例组织方式,还提供了灵活的插件系统和钩子函数,可以帮助我们定…

window安装maven和hadoop3.1.4

前面的文章已讲解如何安装idea和进行基本设置,本文主要带着大家安装配置好maven和hadoop. 大家不用去官网下载,直接使用我发给大家的压缩文件,注意解压后的文件夹不要放在中文目录下,课堂上我们讲解过原因。 这是我电脑上的路径&a…

程序如何注入钩子

引言 相信大家都不想自己的代码被人拿出去做一些商业化的行为,但是一时半会又没有一个有效的方法,这里我提供一点思路。 常用的钩子程序植入方式 方式解释使用难度描述植入通知程序(直接植入)使用APi调用接口形式通知远程服务端程…

Python零基础从小白打怪升级中~~~~~~~入门

第二节:Python入门(二) 一、输入函数 input(“提示信息”) 当程序执行到 input,等待用户输入,输入完成之后才继续向下执行。在Python中,input 接收用户输入后,一般存储到变量,方便…

【每日一题】CF1607 D. Blue-Red Permutation | 贪心 | 简单

题目内容 原题链接 给定一个长度为 n n n 的数组 a a a ,以及一个长度为 n n n 的字符串 s s s ,字符要么为 B 要么为 R。 一次操作中,可以选择一个下标 i i i : 如果 s i s_i si​ 为 B ,可以将 a i a_i ai​…

App Inventor 2 SQLite 拓展

SQLite 拓展 此SQLite 拓展由中文网开发及维护,与 TaifunSQLite 功能类似,但TaifunSQLite是收费的,美刀。 文档及拓展下载地址: App Inventor 2 SQLite 拓展:超流行兼容主流SQL语法的迷你本地数据库引擎 App Invento…

018——红外遥控模块驱动开发(基于HS0038和I.MX6uLL)

目录 一、 模块介绍 1.1 简介 1.2 协议 二、 驱动代码 三、 应用代码 四、 实验 五、 程序优化 一、 模块介绍 1.1 简介 红外遥控被广泛应用于家用电器、工业控制和智能仪器系统中,像我们熟知的有电视机盒子遥控器、空调遥控器。红外遥控器系统分为发送端和…

python如何读取excel文件,并修改内容?

要在Python中读取和修改Excel文件,可以使用openpyxl库。这个库允许你处理Excel文件(.xlsx格式),包括读取、修改单元格内容以及保存修改。以下是一个简单的示例,展示了如何使用openpyxl读取Excel文件、修改内容并保存文…

【SCI绘图】【热力图系列1 R】多特征相关性分析热力图R语言实现

SCI,CCF,EI及核心期刊绘图宝典,爆款持续更新,助力科研! 本期分享: 【SCI绘图】【热力图系列1 R】多特征相关性分析热力图R语言实现 1.环境准备 library(gplots) library(RColorBrewer) 2.数据示例 ###…

宠物医院管理系统

文章目录 宠物医院管理系统一、系统演示二、项目介绍三、12000字论文参考四、系统部分页面展示五、部分代码展示六、底部获取项目源码和万字论文参考(9.9¥带走) 宠物医院管理系统 一、系统演示 宠物医院管理系统 二、项目介绍 语言&#xf…

基于YOLOv8的GC10-DET缺陷检测系统(Python源码+Pyqt6界面+数据集)

💡💡💡本文摘要:基于YOLOv8的GC10-DET缺陷检测系统,并阐述了整个数据制作和训练可视化过程,最后通过Pyside UI界面进行展示。 博主简介 AI小怪兽,YOLO骨灰级玩家,1)YOL…

JAVA并发编程(二)_线程池

JAVA线程池 1.1Java 线程池之 Executor 框架 为了实现线程池和管理线程池,JDK 给我们提供了基于 Executor 接口的一系列接口、抽象类、实现类,我们把它称作线程池的 Executor 框架,Executor 框架本质上是一个线程池; ​ Java 线…

Python的基础知识学习路线1—python简介与环境配置(最全路线,每部分附有代码操作结果)

一、Python简介 (1)发展史 Python是由创始人贵铎范罗萨姆(Guido van Rossum)在阿姆斯特丹于1989年圣诞节期间,为了打发圣诞节的无趣,开发的一个新的解释型脚本语言。之所以选中Python(大蟒蛇的…

免费SSL证书跟付费SSL证书有什么区别?

免费SSL证书与付费SSL证书的主要区别如下: 1. 类型与验证级别: - 免费SSL证书通常仅提供域名验证(DV),这是一种最基本的验证级别,仅验证域名的所有权,确认申请者对所申请域名的有效控制。 - 付费…

AcWing 791. 高精度加法——算法基础课题解

AcWing 791. 高精度加法 题目描述 给定两个正整数(不含前导 0),计算它们的和。 输入格式 共两行,每行包含一个整数。 输出格式 共一行,包含所求的和。 数据范围 1≤整数长度≤100000 输入样例: 1…

每天坚持做逆回购,一年下来,年化收益能达到多少?(附代码)

空口无凭,用数据说话,你可以自己检验各种逆回购策略的历史收益率。 比如说下面这段代码,可以自动进行沪深两市一天期国债逆回购的交易,在收盘之前,或下午 4 点钟之前,自动进行国债逆回购,用闲余…

怎样买国债逆回购最划算,国债逆回购手续费是多少?1折

国债逆回购是一种以国债作为抵押物的贷款,是一种能为投资者提高闲置资金增值能力的金融品种。国债逆回购的优势有: 安全性高,因为国债是信用等级最高、违约风险最低的金融资产,而且国债逆回购是在证券交易所进行的受监管的交易 …

【题解 | 二叉树】给定二叉树的后序遍历和中序遍历,求层序遍历结果

树的遍历 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数 N ( ≤ 30 ) N(≤30) N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三…