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 ...
随机推荐
- ZIP文件操作工具类
2 3 import lombok.extern.slf4j.Slf4j; 4 import org.apache.commons.io.FilenameUtils; 5 6 import java. ...
- AD中添加原理图文档模板-转载
(24条消息) AD中添加原理图文档模板_shuguang552的博客-CSDN博客_ad原理图模板
- 在ubuntu18.04上安装nodejs14
步骤 1:更新 在 Ubuntu 上运行 apt update 命令以更新软件包库内容数据库. sudo apt update 第 2 步:在 Ubuntu 18.04 上安装 Node.js 14 ...
- 解决动态class展示问题
由于部分涉及到隐私,就打马赛克了 比如这个小问题,我有这个动态的class,里面是十几个类似btn的按钮,然后每个btn下面又有子多选框,一开始是我点击那个下面的子级他的父级就被选中,默认选中第一个父 ...
- [478] C2 Age Of Splendor Opcodz
[478] C2 Age Of Splendor Client 00 SendProtocolVersion 01 MoveBackwardToLocation 02 Say 03 RequestEn ...
- win10下载jdk并配置环境变量
win10下载jdk并配置环境变量 1. jdk下载 下载官网:Java SE开发套件15.0.2 2. jdk安装 一直点下一步就可以 3. 环境变量 配置 右键我的电脑--属性--高级系统设置-- ...
- ssh免密码登录服务器
A机为本地主机(即用于控制其他主机的机器) B机为远程主机(即被控制的机器server)B机:192.168.3.145 假如A机无密码登录B机器 A机上的命令: 1,ssh-keygen - ...
- 创建一个HashMap实例,该实例具有足够高的“初始容量”
创建一个HashMap实例,该实例具有足够高的"初始容量" /** * 创建一个{@link HashMap}实例,该实例具有足够高的"初始容量" * * @p ...
- UVA10404
由题意可知,这题和巴什博弈没什么关系了 相似题目:AtCoder Beginner Contest 278 F - Shiritori 预备知识:DP,博弈论的必胜态和必败态 问题的关键是确定\(f_ ...
- mysql查询和更新不能同时出现
mysql出现You can't specify target table for update in FROM clause 这个错误的意思是不能在同一个sql语句中,先select同一个表的某些值 ...