Django的中间件

Django的中间件

【一】重点:

django中间件是django的门户

  • 请求来的时候需要经过中间件才能到达真正的django后端
  • 响应走的时候也需要经过中间件才能发送出去
  • 中间件按照顺序依次执行

​ Django 中间件(Middleware)是 Django 框架提供的一种机制,用于在请求和响应处理过程中进行预处理和后处理操作。中间件可以对请求进行修改、验证、日志记录等操作,也可以对响应进行修改、处理异常等操作。

​ Django 中间件的主要作用是将请求和响应传递给下一个中间件或视图函数,并在传递过程中执行特定的逻辑。中间件可以在请求到达视图函数之前预处理请求,也可以在视图函数返回响应之后对响应进行后处理。

【二】常见用途:

  1. 认证和授权:中间件可以用于验证用户身份、检查权限和权限控制。
  2. 请求处理:中间件可以对请求进行预处理,如请求参数解析、请求数据验证等。
  3. 日志记录:中间件可以记录请求和响应的日志,用于调试和监控。
  4. 缓存:中间件可以实现请求的缓存,提高性能。
  5. 异常处理:中间件可以捕获和处理异常,例如记录异常日志或返回自定义错误页面。
  6. 响应处理:中间件可以在视图函数返回响应之后对响应进行修改或添加额外的信息。

【三】常见的方法

​ 在 Django 中,中间件是通过一个类来实现的,类中定义了一系列方法,每个方法代表一个中间件处理的阶段。常见的中间件方法包括:

​ 重点掌握

  • process_request(request): 在请求到达视图函数之前调用。(进)

    • 请求来的时候需要经过每一个中间件里面的process_request方法结果的顺序是按照配置文件中注册的中间件从上往下的顺序依次执行。
    • 如果中间件里面没有定义该方法,那么直接跳过执行下一个中间件。
    • 如果该方法返回了HttpResponse对象,那么请求将不在继续往后执行。而是直接原路返回(校验失败不允许访问…)就是截胡。

    process_request方法就是用来做全局相关的所有限制功能。

  • process_response(request, response): 在视图函数返回响应之后调用。(出)

    • 响应走的时候需要结果每一个中间件里面的process_response方法。该方法有两个额外的参数request,response

    • 该方法必须返回一个HttpResponse对象。

      • 默认返回的就是形参response
      • 你也可以自己返回自己的
    • 顺序是按照配置文件中注册了的中间件。从下往上依次经过,如果你没有定义的话直接跳过执行下一个。

​ 如果在第一个process_request方法就已经返回了HttpResponse对象,那么想要走的时候是经过所有的中间件里面的process_response还是有其他情况。

答案是其他情况:

  • 就是会直接走同级别的process_response返回
  • image-20240312230536930

​ 了解即可

  • process_view(request, view_func, view_args, view_kwargs):

    • 在路由匹配之后执行视图函数之前。 会自动执行中间件里面该方法
    • 顺序是按照配置文件中注册的中间件从上午往下的顺序依次执行。
  • process_template_response(request, request, response):在模板响应对象生成后的处理逻辑。可以修改模板上下文或响应内容。

  • process_exception(request, exception): 在视图函数抛出异常时调用。

​ 您可以在 Django 项目的配置文件 settings.py 中的 MIDDLEWARE 设置中指定中间件的顺序。中间件按照顺序依次执行,前一个中间件的输出将作为下一个中间件的输入。

以下是一个示例的 settings.py 中间件设置的部分:

MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]

​ 这是 Django 默认的中间件设置,包括了一些常用的中间件,如安全中间件、会话中间件、CSRF 中间件等。

​ 您也可以编写自定义的中间件来满足特定的需求。编写自定义中间件的步骤包括创建一个类,实现中间件方法,并将其添加到 MIDDLEWARE 设置中。

【四】Django中间件的模板

要使用 Django 中间件,您需要按照以下步骤进行操作:

  1. 在项目名给或者应用名下创建一个任意名称的文件夹
  2. 在该文件夹创建一个任意名称py文件
  3. 在该py文件内需要书写类(这个类必须继承MiddlewareMixin
  4. 需要将类的路径以及字符串的形式注册到配置文件中才能生效
MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware',# 'django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware','你自己写的中间件的路径1''你自己写的中间件的路径2''你自己写的中间件的路径3'
]
  • 在注册自己的中间件(在应用下创建路径有提示,但是如果在项目下创建就没有提示了,你就需要自己比对书写了)
class MyMiddleware:def __init__(self, get_response):self.get_response = get_responsedef process_request(self, request):# 在请求到达视图函数之前的处理逻辑passdef process_view(self, request, view_func, view_args, view_kwargs):# 在视图函数被调用之前的处理逻辑passdef process_exception(self, request, exception):# 在视图函数抛出异常时的处理逻辑passdef process_template_response(self, request, response):# 在模板响应对象生成后的处理逻辑# 可以修改模板上下文或响应内容return responsedef process_response(self, request, response):# 在视图函数返回响应之后的处理逻辑# 可以修改响应或添加额外的信息return response
  1. 配置中间件:在 Django 项目的配置文件 settings.py 中,找到 MIDDLEWARE 设置。将您的中间件类添加到列表中,并指定其顺序。中间件按照列表中的顺序依次执行。
MIDDLEWARE = [# 其他默认中间件...'myapp.middleware.MyMiddleware',
]

请确保将 'myapp.middleware.MyMiddleware' 替换为您自己的中间件类的完整路径。

  1. 处理请求和响应:当您的 Django 项目接收到请求时,中间件将按照顺序依次处理请求和响应。每个中间件方法将根据其定义和需求执行相应的操作。您可以在中间件方法中修改请求和响应对象,添加额外的信息,进行验证,记录日志等。

​ 需要注意的是,中间件方法的参数可能会有所不同。例如,process_request 方法只接收一个 request 参数,而 process_view 方法接收 requestview_funcview_argsview_kwargs 参数。请根据您的需求和中间件方法的定义来确定您需要使用的参数。

方法的参数可能会有所不同。例如,process_request 方法只接收一个 request 参数,而 process_view 方法接收 requestview_funcview_argsview_kwargs 参数。请根据您的需求和中间件方法的定义来确定您需要使用的参数。

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

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

相关文章

设计模式——代理模式12

代理模式给某对象提供一个代理对象,由代理对象来控制对原对象的引用。该模式经常出现在系统框架或相关组件中,如Spring框架如何解决循环依赖,在Mybatis 定义 Dao 层相关接口 不写实现 如何通过注解或者xml映射到对应到sql语句。下面介绍 静态…

再见 MybatisPlus,阿里推出新 ORM 框架更牛X

最近看到一个 ORM 框架 Fluent Mybatis 挺有意思的,整个设计理念非常符合工程师思维。 我对官方文档的部分内容进行了简单整理,通过这篇文章带你看看这个新晋 ORM 框架。 官方文档:https://gitee.com/fluent-mybatis/fluent-mybatis/wikis 提…

Nginx反向代理与Tomcat实现ssm项目前后端分离部署

Nginx nginx是一款http和支持反向代理的web服务器,以其优越的性能被广泛使用。以下是百度百科的介绍。 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.…

智慧园区水电能源监控管理系统

随着智慧城市的快速发展,智慧园区作为城市智能化的重要组成部分,其能源监控管理系统显得尤为关键。智慧园区水电能源监控管理系统,是利用先进的信息技术和自动控制技术,对园区内的水电能源使用进行实时监控、管理和优化的综合性智…

美国34401A安捷伦数字万用表

181/2461/8938产品概述: 附加功能: 6 1/2位数分辨率10种测量功能:DC/交流电压、DC/交流电流、2线和4线电阻、二极管、连续性、频率、周期基本精度:0.0035% DC,0.06%交流1000 V最大电压输入,3 A最大电流输入每秒1000次读数512读取记忆 安捷…

Linux C++ 027-STL之deque容器

Linux C 027-STL之deque容器 本节关键字:Linux、C、deque 相关库函数:pubsh_back、begin、front、sort deque基本概念 功能:双端数组,可以对头端进行插入删除操作。 deque 与 vector 的区别: (1&#x…

vue将html生成pdf并分页

jspdf html2canvas 此方案有很多的css兼容问题,比如虚线边框、svg、页数多了内容显示不全、部分浏览器兼容问题,光是解决这些问题就耗费了我不少岁月和精力 后面了解到新的技术方案: jspdf html-to-image npm install --save html-to-i…

关于pandas 无法读取 csv 文件数据的解决方式

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 …

LabVIEW和2D激光扫描的受电弓滑板磨耗精确测量

LabVIEW和2D激光扫描的受电弓滑板磨耗精确测量 在电气化铁路运输中,受电弓滑板的健康状况对于保障列车安全行驶至关重要。受电弓滑板作为连接电网与列车的直接介质,其磨损情况直接影响到电能的有效传输及列车的稳定运行。精确、快速测量受电弓滑板磨损情…

IntelliJ IDEA 2024.1安装与激活[破解]

一:IDEA官方下载 ①如题,先到IDEA官方下载,简简单单 ②IDEA官方:IntelliJ IDEA – the Leading Java and Kotlin IDE 二:获取脚本 🌟网盘下载:jetbra (密码:lzh7) 🌟获取…

CLI的使用与IOS基本命令

1、实验目的 通过本实验可以掌握: CLI的各种工作模式个CLI各种编辑命令“?” 和【Tab】键使用方法IOS基本命令网络设备访问限制查看设备的相关信息 2、实验拓扑 CLI的使用与IOS基本命令使用拓扑如下图所示。 3、实验步骤 (1)CLI模式的切…

Visual Studio Code 终端为管理员权限

第一部 1、 Visual Studio Code 快捷方式启动选项加上管理员启动 第二步 管理员方式运行 powershell Windows 10的任务栏自带了搜索。或者开始菜单选搜索只需在搜索框中输入powershell。 在出来的搜索结果中右击Windows PowerShell,然后选择以管理员方式运行。 执…

使用Docker Registry-v2搭建镜像仓库详细教程

我们使用docker来部署私有化镜像仓库… 1、下载 registry:v2 镜像 docker pull registry:22、在私有仓库所在的主机目录新建一个文件夹,用于持久化保存仓库中的镜像 mkdir -p /opt/registry3、启动registry镜像 使用docker镜像启动私有仓库容器服务,…

ArcGIS Desktop使用入门(四)工具箱——属性域

系列文章目录 ArcGIS Desktop使用入门(一)软件初认识 ArcGIS Desktop使用入门(二)常用工具条——标准工具 ArcGIS Desktop使用入门(二)常用工具条——编辑器 ArcGIS Desktop使用入门(二&#x…

nacos服务治理

nacos 服务演变之路 单体架构 集群级垂直化 SOA 微服务 微服务优缺点 SOA与微服务区别 springcloud技术栈 服务发现概念 服务发现两种方式–客户端服务发现 服务发现两种方式–服务端发现 服务发现技术对比 nacos架构图 nacos实战 服务发现 源码解析 nacos实现了springcloud…

网络安全---RSA公钥加密与签名

实验项目:RSA公钥加密与签名实验 1.实验目的 本实验的学习目标是让学生获得 RSA 算法的动手经验。 通过课堂学习,学生应该已经了解 RSA 算法的理论部分, 知道在数学上如何生成公钥、私钥以及如何执行加密、解密和签名生成、验证。 通过使用…

Docker容器嵌入式开发:Docker Ubuntu18.04配置mysql数据库

在 Ubuntu 18.04 操作系统中安装 MySQL 数据库的过程。下面是安装过程的详细描述: 首先,使用以下命令安装 MySQL 服务器: sudo apt install mysql-server系统会提示是否继续安装,按下 Y 键确认。 安装过程中,系统会下载并安装 MySQL 相关的软件包,包括 libaio1、mysql…

STM32+ESP8266水墨屏天气时钟:文字取模和图片取模教程

项目背景 本次的水墨屏幕项目需要显示一些图片和文字,所以需要对图片和文字进行取模。 取模步骤 1.打开取模软件 2.选择图形模式 3.设置字模选项 注意:本次项目采用的是水墨屏,并且是局部刷新的代码,所以设置字模选项可能有点…

实验3 交换机基本配置

实验3 交换机基本配置 一、 原理描述二、 实验目的三、 实验内容四、实验步骤1.建立实验拓扑2.设备编址3.检测链路连通性4.交换机双工模式配置 一、 原理描述 交换机(Switch)也称为交换式集线器,其工作在OSI 第二层(数据链路层)上…

Windows摄像头推流-RTSP

0.背景: 调试rtsp视频流时,没有网络摄像头怎么办,只需要在同一个局域网下,用windows推送rtsp流,就可以在linux进行接收。 1.下载资源包 资源包链接:https://pan.baidu.com/s/1008I7TKazE4JgFiozhtekg?pw…