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 ...
随机推荐
- maven工程运行环境修改 maven的java工程取mysql数据库数据
maven工程运行环境修改 <plugins> <plugin> <!-- https://mvnrepository.com/artifact/org.apache. ...
- iOS 15 UI适配
1. UINavigationBar 在iOS 15中,UINavigationBar默认为透明.在滑动时会有模糊效果.如果想要一直就是模糊效果,可以通过改变scrollEdgeAppearance属 ...
- tomcat各个版本下载
官网地址:https://archive.apache.org/dist/tomcat/
- SSH的密钥登录配置
1.ssh的登录方法. 两种方法: (1)linux系统connect to linux ssh -l root 192.168.2.191 #直接登录. 语法:$ssh -p 22 user@hos ...
- Appium自动化测试之键盘操作pressKeyCode()方法(Android特有)
电话键 KEYCODE_CALL 拨号键 5 KEYCODE_ENDCALL 挂机键 6 KEYCODE_HOME 按键Home 3 KEYCODE_MENU 菜单键 82 KEYCODE_BACK ...
- 记录一次echarts 中bar 定时跳跃并显示内容
查看echarts api ----- https://www.echartsjs.com/zh/api.html#echarts 搜索 1.dispatchAction 执行的关键 2.hi ...
- 如何获取传输url后面的参数
function GetRequest(urlStr) {//两种方式,输入链接获取或当前链接获取 if (typeof urlStr == "undefined") { var ...
- Linux日常指令
Linux: https://man.linuxde.net/ Linux命令大全 基础指令 终端输入: #shutdown -h now : 立即关机 #ls: 显示路径下所有的文件: ...
- IE8兼容的零零碎碎
css部分 1 nth-of-type选择器 2 span:nth-of-type(1) 3 /*IE8兼容写法*/ 4 span:first-child /*选中第一个*/ 5 span:first ...
- Django基础篇 01- 初识Django
一.Django介绍 flask,FastApi是轻量级服务端开发框架 Django是重量级服务端开发框架 ORM:封装了数据库操作 form:校验请求数据 安装Django: pip install ...