Backend - Django Middleware 中间件

目录

一、原理

(一)理解

1. 作用

(1)修改请求request

(2)修改响应response

2. 配置

3. 延伸 - 钩子(hooks) 框架

(二)执行顺序

1. request、view、response 之间

2. 多个 middleware 之间

二、常见中间件

(一)默认中间件

(二)常见中间件

三、自定义中间件

(一)自定义方法(理论)

1. 传统方法(五大钩子函数)

2. Django官方推荐方法

(二)自定义制作(实战)

1. 新建中间件文件

2. settings.py 里


一、原理

(一)理解

1. 作用

        是修改请求和响应对象的钩子。

        是介于请求request和响应response之间的处理过程。

(1)修改请求request

        担任“浏览器请求”和“视图处理请求”的中间角色,修改传送到 view 中的 HttpRequest 对象。

(2)修改响应response

        担任“视图返回响应”和“浏览器获取响应”的中间角色,view 返回的 HttpResponse 对象。

2. 配置

        在settings.py的 MIDDLEWARE=[ ] 中,放置中间件

3. 延伸 - 钩子(hooks) 框架

        Django钩子是指一些方法或函数,在特定事件或过程中被触发。用于自定义拦截并处理一些函数调用、事件、消息的代码

(二)执行顺序

1. request、view、response 之间

        request > middleware > view > middleware > response

2. 多个 middleware 之间

        在“request”后 &“view视图处理”前,中间件会按照settings.py设定的位置,由上往下执行;

        在“view视图处理”后 &“response”前,中间件会按照settings.py设定的位置,由下往上执行;

        举例:

                若中间件 A、B、C 中,B依赖于 A 中的参数,则设定位置时需将 B 放在 A 的后面。

二、常见中间件

(一)默认中间件

MIDDLEWARE = ['django.middleware.security.SecurityMiddleware',  # 开启网络安全保护'django.contrib.sessions.middleware.SessionMiddleware',  # 开启session缓存,缓存请求和响应数据,以提高性能和减少响应时间'django.middleware.common.CommonMiddleware',  # 通用中间件,可自动为URL路由添加www前缀和斜杠后缀'django.middleware.csrf.CsrfViewMiddleware',  # 开启跨域请求伪造的安全防御'django.contrib.auth.middleware.AuthenticationMiddleware',  # 验证用户身份(request.user)、授予或拒绝访问权限'django.contrib.messages.middleware.MessageMiddleware',  # 消息中间件,开启cookie或会话的消息'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

(二)常见中间件

MIDDLEWARE = [# . . .'django.middleware.locale.LocaleMiddleware',  # 开启语言language'admin_reorder.middleware.ModelAdminReorder',  # 开启 admin 后台管理
]

三、自定义中间件

(一)自定义方法(理论)

1. 传统方法(五大钩子函数)

def process_request(self,request) :  # 请求刚到来,执行视图之前,权限认证
def process_view(self, request, view_func, view_args, view_kwargs) :  # process_request之后,路由转发到视图,执行视图之前
def process_exception(self, request, exception) :  # 视图执行中发生异常时
def process_template_response(self,request,response) :  # 视图刚执行完毕,process_response之前, 模板渲染时执行
def process_response(self, request, response) :  # 视图执行完毕,返回响应时

2. Django官方推荐方法

有函数实现方式和类实现方式(推荐使用类实现方式)

针对类实现方式,举例:

class BookMiddleware:def __init__(self, get_response):# 一次性设置和初始化print('1. 只会在启动项目时执行一次')self.get_response = get_response  # 下一步要执行的操作def __call__(self, request):# 视图函数执行前的代码print('2. 视图函数执行前, process_view执行前的代码')response = self.get_response(request)# 视图函数执行后的代码print('4. 视图函数执行后的代码')return responsedef process_view(self, request, view_func, view_args, view_kwargs):print("3. 视图函数%s执行前的代码" % view_func.__name__)def process_exception(self, request, exception):print("5. 视图函数处理异常")

(二)自定义制作(实战)

1. 新建中间件文件

        放在项目APP文件夹内。

        例如,新建一个middleware_book.py文档,放置路径是myApp/middleware文件夹内

        文档内容,前面有举例。

2. settings.py 里

        MIDDLEWARE=[ ] 中添加自定义中间件。

# 例如:
MIDDLEWARE = [# . . .'myApp.middleware.middleware_book.BookMiddleware'  # 自定义中间件
]

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

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

相关文章

OpenHarmony—开发及引用静态共享包(API 9)

HAR(Harmony Archive)是静态共享包,可以包含代码、C库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。 接下来&a…

springboot146基于Spring Boot的可盈保险合同管理系统的设计与实现

可盈保险合同管理系统 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本可盈保险合同管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时…

富文本编辑器CKEditor4简单使用-02(常用插件安装及使用)

富文本编辑器CKEditor4简单使用-02(常用插件安装及使用) 1. CKEditor4 入门2. 下载并安装常用插件——Language插件2.1 下载插件2.2 下载并安装 Language 插件2.2.1 下载 Language 插件2.2.2 下载 Menu Button插件以及后续的各依赖插件2.2.3 安装下载的L…

YOLOv5改进 | Conv篇 | 结合Dual思想利用HetConv创新一种全新轻量化结构CSPHet(参数量下降20W,)

一、本文介绍 本文给大家带来的改进机制是我结合Dual的思想利用HetConv提出一种全新的结构CSPHet,我们将其用于替换我们的C3结构,可以将参数降低越20W,GFLOPs降低至4.1GFLOPs,同时本文的结构比我提出的另一个CSPPC精度更高,但是轻量化效果要差一点同时本文结构为我独家创…

ElasticSearch-IK分词器(elasticsearch插件)安装配置和ElasticSearch的Rest命令测试

四、IK分词器(elasticsearch插件) IK分词器:中文分词器 分词:即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一一个匹配操作&…

Pointnet++改进卷积系列:全网首发ODConv2全维动态卷积 |即插即用,提升特征提取模块性能

简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入ODConv2全维动态卷积,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3…

ElasticSearch概述及Window和Linux环境下安装

一、ElasticSearch 1、ElasticSearch概述 ES(Elasticsearch)是一个基于开放源代码的分布式搜索引擎,用于快速和灵活地搜索和分析大量数据。它是构建在Apache Lucene之上的,通过提供一个简单而强大的RESTful API来实现全文搜索、…

麒麟系统—— openKylin 安装 Nginx

麒麟系统—— openKylin 安装 Nginx 一、准备工作1. 确保麒麟系统 openKylin 已经安装完毕。 二、下载 nginx三、解压与运行解压检查与编译安装编译运行 四、配置加入到服务中加入环境变量nginx 配置文件 五、常用命令 Nginx 是一款高性能的 HTTP 和反向代理服务器&#xff0c…

Java编程练习之类的封装2

1.封装一个股票(Stock)类,大盘名称为上证A股,前一日的收盘点是2844.70点,设置新的当前值如2910.02点,控制台既要显示以上信息,又要显示涨跌幅度以及点数变化的百分比。运行效果如下:…

【甲方安全建设】DevOps初体验

文章目录 前言传统的开发方式:Docker-解决环境问题 DevOps-CI/CD走向流水线Jenkins工作流程Git拉取代码Maven构建打包通过SSH连接后端服务器 实现效果 DevSecOps-安全赋能关于安全平台漏洞扫描漏洞预警TODO 前言 临近春节,笔者经过半年北漂,…

Linux系统——防火墙

一、防火墙的认识 引言 安全技术 入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全…

企业如何对u盘管控,进行U盘管理?公司电脑禁用U盘的方法

随着信息技术的飞速发展,U盘等移动存储设备已成为企业数据传输和存储的重要工具。然而,U盘的滥用和误操作也带来了巨大的安全隐患,如数据泄露、病毒传播等。 因此,对企业而言,如何有效管控U盘的使用,确保数…

网络安全简介

网络安全: ​ 网络安全攻击分为被动攻击和主动攻击。 1. 被动攻击:是指攻击者从网络上窃取了他人的通信内容,通常把这类的攻击称为截获,被动攻击只要有2种形式:消息内容泄漏攻击和流量分析攻击。由于攻击者没…

Android 8.1 输入框返回键改为删除功能

Android 8.1 输入框返回键改为删除功能 最近接到客户反馈,想要实现在输入框返回键改为删除功能,具体修改参照如下: /frameworks/base/core/java/android/view/View.java public boolean dispatchKeyEvent(KeyEvent event) {if (mInputEvent…

Pymysql将爬取到的信息存储到数据库中

爬取平台为电影天堂 获取到的数据仅为测试学习而用 爬取内容为电影名和电影的下载地址 创建表时需要建立三个字段即可 import urllib.request import re import pymysqldef film_exists(film_name, film_link):"""判断插入的数据是否已经存在""&qu…

element表格内多个输入框时如何添加表单校验

以下.vue文件Demo可直接复制运行: 重点: 1:表格数据定义在form里 2:prop需要加索引;索引前的变量不要加form,直接取里边的key,索引后的字段需要和表格里字段属性对应 。:prop"tableInfo.l…

软件工程知识梳理1-可行性研究

目的:确定问题是否值得去解决。就是用最小的代价在尽可能短的时间内确定问题是否能够解决。 可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也即是在较高层次上以较抽象的方式进行系统分析和设计的过程。 考察点:技术可…

0基础学习VR全景平台篇第140篇:摄影器材保养与维护

上课!全体起立~ 大家好,欢迎观看蛙色官方系列全景摄影课程! 摄影器材属于精密仪器,在使用过程中会磨损、老化、积灰。如果不对摄影器材进行清洁和保养,油污、灰尘、水渍长期停留在设备上,不仅会大大缩短相机…

如何利用Laravel实现验证码功能

1、生成验证码图片 在Laravel中,生成验证码图片的方式通常是使用PHP的GD库。GD库是一种非常流行的PHP图像处理库,提供了很多方便的函数,可以轻松地生成各种类型的图像。在Laravel中,我们可以使用GD库的函数来实现验证码图片的生成…

从[redis:LinkedList]中学习链表

文章目录 adlistlistNodelistmacros[宏定义]listCreatelistInitNodelistEmptylistReleaselistAddNodeHeadlistLinkNodeHeadlistAddNodeTaillistLinkNodeTaillistInsertNodelistDelNodelistUlinkNodelistIndexredis3.2.100quicklistredis7.2.2quicklist redis的基本数据类型之一…