Django中间件的介绍及使用
1、中间件的理解:
是用来处理Django请求与响应的框架级别的钩子,处于wsgi模块与视图函数之间,在执行视图函数之前和之后所做
的动作,是一个轻量级、低级别的插件,作用于全局,使用不当很可能影响性能。
2、导入中间件模块
在app01下创建my_middlewares.py文件
# from django.middleware.csrf import CsrfViewMiddleware 按住Ctrl键然后鼠标单击CsrfViewMiddleware
1 from django.utils.deprecation import MiddlewareMixin
3、注册中间件
打开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',
'app01.my_middlewares.MD1'
'app01.my_middlewares.MD2' # 注册中间件
]
4、中间件就是一个类,处理django的请求和响应的五个方法:
参数 执行时间 执行顺序 返回值
(1)process_request(self,request):
参数:
request跟视图函数中的request一样
执行时间:
视图函数执行之前,也在路由匹配之前。
执行顺序:
按照中间件的注册顺序 顺序执行
返回值:
None: 正常流程
HttpResponse: 如果MD1(第一个注册的中间件)有返回值,那么之后的中间件、路由匹配、视图函数都不执行了,
直接执行当前中间件中的process_response方法,剩下正常流程将执行结果返回给浏览器。
(2)process_response(self,request,response):
参数:
response response对象
request跟视图函数中的request一样
视图函数在执行后,需要return response,所以中间件也需要返回response
执行时间:
视图函数执行之后
执行顺序:
按照中间件的注册顺序 倒序执行
返回值:
HttpResponse: 必须返回response对象
(3)process_view(self,request,view_func,view_args,view_kwargs):
参数:
request跟视图函数中的request一样
view_func 视图函数
view_args 传递给视图函数的位置参数
view_kwargs 传递给视图函数的关键字参数
形参的名字可以任意取
执行时间:
视图函数执行之前,路由匹配之后。
执行顺序:
按照中间件的注册顺序 顺序执行
返回值:
None: 正常流程
HttpResponse: 当前中间件之后的中间件process_view、视图函数都不执行,
直接执行最后一个中间件中的process_response方法,剩下正常流程将结果返回给浏览器。
(4)process_expection(self,request,expection):
参数:
request跟视图函数中的request一样
expection 错误对象
执行时间(触发条件):
视图函数执行出错之后才执行
执行顺序:
按照中间件的注册顺序 倒序执行
返回值:
None: 交给下一个中间件处理异常,都不处理交给Django处理。
HttpResponse: 当前中间件之后的中间件process_expection都不执行,
直接执行最后一个中间件中的process_response方法,剩下正常流程将结果返回给浏览器。
(5)process_template_response(self,request,response):
参数:
request跟视图函数中的request一样
response template_response对象
response.template_name = 'index1.html' #可以动态换模板
response.context_data['name'] = 'jack' #可以动态换模板内容
执行时间(触发条件):
视图函数返回的是template_response对象
打开views.py 导入TemplateResponse
from django.template.response import TemplateResponse
执行顺序:
按照中间件的注册顺序 倒序执行
返回值:
HttpResponse: 必须返回template_response对象

Django中间件的介绍及使用的更多相关文章
- django中间件介绍
在学习django中间件之前,先来认识一下django的生命周期,如下图所示: django生命周期:浏览器发送的请求会先经过wsgiref模块处理解析出request(请求数据)给到中间件,然后通过 ...
- Django对中间件的调用思想、csrf中间件详细介绍、Django settings源码剖析、Django的Auth模块
目录 使用Django对中间件的调用思想完成自己的功能 功能要求 importlib模块介绍 功能的实现 csrf中间件详细介绍 跨站请求伪造 Django csrf中间件 form表单 ajax c ...
- Django - Django框架 简单介绍
Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码 ...
- Django项目结构介绍
官网下载网址:https://www.djangoproject.com/download/ 安装(安装最新LTS版): pip3 install django==2.0.7 创建一个django项目 ...
- Django 2.0 学习(20):Django 中间件详解
Django 中间件详解 Django中间件 在Django中,中间件(middleware)其实就是一个类,在请求到来和结束后,Django会根据自己的规则在合适的时机执行中间件中相应的方法. 1. ...
- Django中间件的5种自定义方法
阅读目录(Content) Django中间件 自定义中间件 中间件(类)中5种方法 中间件应用场景 回到顶部(go to top) Django中间件 在http请求 到达视图函数之前 和视图函 ...
- Django中间件如何处理请求
Django中间件 在http请求 到达视图函数之前 和视图函数return之后,django会根据自己的规则在合适的时机执行中间件中相应的方法. Django1.9版本以后中间件的执行流程 1. ...
- 基于django中间件的编程思想
目录 前言 前期准备 importlib模块介绍 基于django中间件的编程思想 django中settings源码 配置文件的插拔式设计 基于django中间件的思想,实现功能配置 前言 在学习d ...
- Django中间件、csrf跨站请求、csrf装饰器、基于django中间件学习编程思想
django中间件 中间件介绍 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出. ...
- 12月22日内容总结——django中间件的三个了解要求的方法、基于django中间件的功能设计、cookie与session
目录 一.django中间件三个了解的方法 二.django中间件五个方法的执行流程详解 三.基于django中间件的功能设计 功能设计介绍 如何利用字符串导入模块 功能模拟 四.cookie与ses ...
随机推荐
- idea提交时忽略.class、.iml文件和文件夹或目录的方法
第一种方法 在Setings–> Editor --> File Types -->Ignore files and folders中添加需要忽略的文件和文件夹: .idea 忽略 ...
- Linux服务器时间校准
当发现系统时间不正确时可以通过 date 命令查看Linux系统的当前时间 最简便的修改方法,我们可以通过 date -s "20190917 22:04:00" 来直接修改Lin ...
- 网络服务之DHCP与FTP
目录 DHCP 一.DHCP是什么? 二.DHCP的优点 三.DHCP的分配过程 四.DHCP的工作原理 五.DHCP动态获取实验 FTP 一.FTP是什么? 二.FTP的数据连接模式 三.svftp ...
- 实验一 密码引擎-1-OpenEuler-OpenSSL编译
1. 下载最新的OpenSSL源码 2. 用自己的8位学号建立一个文件夹,cd 你的学号,用pwd获得绝对路径 3. 参考https://www.cnblogs.com/rocedu/p/508762 ...
- Houdini_Python笔记
目录 Gemetry 用Stash节点预览模型 判断文件是否存在 PDG Gemetry 用Stash节点预览模型 import hou stashParm = stashNode.parm(&quo ...
- Spring之IOC(控制反转)入门理解
在面向对象编程中,我们经常处理处理的问题就是解耦,程序的耦合性越低表明这个程序的可读性以及可维护性越高(假如程序耦合性过高,改一处代码通常要对其他地方也要做大量修改,难以维护).控制反转(Invers ...
- 项目实训 DAY17-18
第一天,与后端的同学交接,先跟他说了怎么安装依赖库,弄完后他那边运行有些问题. 第二天,后端的同学说可以运行但无法部署,我思考后一起商量着只做静态模型(本身不同的两张图片只有input有区别),然后添 ...
- 使用@Param注解时注意org.springframework.data.repository.query.Param与org.apache.ibatis.annotations.Param的区别
注解@Param有以下两种: 1.Spring org.springframework.data.repository.query.Param 2.mybatis org.apache.ibatis. ...
- linux 命令下载文件
系统 ubuntu :若提示没有找到命令 请自行下截安装 sz 命令发送文件到本地:# sz filename rz命令本地上传文件到服务器:# rz执行该命令后,在弹出框中选择要上传的文件即可.
- 2003031120—廖威—Python数据分析第三周作业—numpy的简单操
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/pexy/20sj 这个作业要求链接 https://edu.cnblogs.com/campus/pexy ...