Django之 中间件
中间件
介绍
中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。如果你想修改请求,例如被传送到view中的HttpRequest对象。 或者你想修改view返回的HttpResponse对象,这些都可以通过中间件来实现。可能你还想在view执行之前做一些操作,这种情况就可以用 middleware来实现。django中自带如下7个中间件,在setting配置可见,如下:
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', ]
概念
中间件是一个类(类里面可以定义方法)
方法(待补充):
proces_request(返回值可有可无),process_response(必须设置返回值:response)
定义
以后想要对所有的请求做统一操作时,用中间件。
只是对少量的视图函数做操作时,用装饰器。
Django的请求生命周期

自定义django中间件
  除了django自带如上7种中间件,我们为了满足自己的需求,也可自定义中间件,中间件就是定义一个类,类的下面有四个方法,分别为process_request、process_view、process_exception及process_response,但此类必须但是必须继承MiddlewareMixin,引入方式如下:django.utils.deprecation import MiddlewareMixin。
  自定义中间件实例如下,中间件.py文件必须放在django项目的根目录下,中间件的配置方式与自带中间件配置方式一致。如下实例:
中间件执行顺序
中间件被执行的顺序
如上,中间件的执行顺序是按照如上中间件配置顺序执行的,从上到下,依次执行中间件中的process_request函数,然后根据url执行所有views视图函数,视图函数执行完后,再从后依次往前执行process_response函数。
但是需要注意,如下为请求的视图函数和自定义的中间件:

views函数:
def index(request):
print("view函数...")
return HttpResponse("OK")
中间件:
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse class Md1(MiddlewareMixin): def process_request(self,request):
print("Md1请求")
#return HttpResponse("Md1中断")
def process_response(self,request,response):
print("Md1返回")
return response class Md2(MiddlewareMixin): def process_request(self,request):
print("Md2请求")
def process_response(self,request,response):
print("Md2返回")
return response
此时输出结果顺序为:
Md1请求
Md2请求
视图函数
Md2返回
Md1返回
SessionMiddleware
class Md3(SessionMiddleware):
def process_request(self, request):
print("Md3请求") def process_response(self, request, response):
print("Md3返回")
return response class Md4(SessionMiddleware):
def process_request(self, response):
print("Md4请求") def process_response(self, request, response):
print("Md4返回")
return response
Django之 中间件的更多相关文章
- 自定义Django的中间件
		
分析Django的生命周期,我们知道所有的http请求都要经过Django的中间件. 假如现在有一个需求,所有到达服务端的url请求都在系统中记录一条日志,该怎么做呢? Django的中间件的简介 D ...
 - python/ Django之中间件
		
python/ Django之中间件 一.中间件 中间件共分为: (1)process_request(self,request) (2)process_view(self, request, cal ...
 - Django组件-中间件
		
1.中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影 ...
 - 细说Django的中间件
		
分析Django的生命周期,我们知道所有的http请求都要经过Django的中间件. 假如现在有一个需求,所有到达服务端的url请求都在系统中记录一条日志,该怎么做呢? Django的中间件的简介 D ...
 - csrf 跨站请求伪造相关以及django的中间件
		
django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware来完成. 1.django中常用的中间件? - proces ...
 - python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)
		
一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 from app01 import views urlpatterns = [ path('admin/', admi ...
 - django 自定义中间件 middleware
		
Django 中间件 Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出.中间件的设计为开发者提供了一种无侵入式的开发方式,增强 ...
 - day 52  Django 的中间件加载顺序
		
前情提要: django的中间键的作用是进行加载 可以通过中间键进行辅助操作 1.中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局 ...
 - django框架--中间件系统
		
目录 零.参考 一.中间件的基本理解 二.中间件的系统定位 三.中间件的配置 四.中间件的执行流程 五.中间件与装饰器之间的思考 六.中间件的应用场景 七.内置中间件 八.总结 零.参考 https: ...
 - 浅谈Django的中间件与Python的装饰器
		
浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...
 
随机推荐
- BZOJ 5312: 冒险
			
首先我们考虑,对于And 和 Or 操作,对于操作位上只有And 0 和 Or 1 是有效果的. 我们注意到如果区间内需要改动的操作位上的数字都相同,那么是可以区间取与以及区间取或的. 那其实可以维护 ...
 - Kattis - amsterdamdistance【数学】
			
Kattis - amsterdamdistance[数学] 题意 给出两个点 算出从第一个点到第二个点的最短距离,只不过这里不是直角坐标系, 是雷达图 思路 因为内圈的圆的路径要比外圈的小,所以我们 ...
 - mysql 系列文章推荐
			
1. mysql日志详细解析 http://www.cnblogs.com/wangkongming/p/3684950.html 2. mysql 主从同步实验 http://pmg ...
 - LeetCode: Find Largest Value in Each Tree Row
			
BFS /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ...
 - 利用ST MCU内部的基准参考电压监测电源电压及其它
			
源: 利用ST MCU内部的基准参考电压监测电源电压及其它
 - JMeter接口测试和压力测试
			
JMeter接口测试和压力测试 JMeter可以做接口测试和压力测试.其中接口测试的简单操作包括做http脚本(发get/post请求.加cookie.加header.加权限认证.上传文件).做web ...
 - Zabbix Windos agent 安装
			
系统:Windos 2008 R2 x64 服务:Zabbix_agents_3.0.4.win 一.安装Zabbix_agents_3.0.4.win 1.下载Zabbix_agents_3.0.4 ...
 - Mysql 慢查询日志配置
			
查询日志 1.主配置文件下对添加参数.重启生效. vim /etc/my.cnf 注:主要用于查看开发程序执行时间. 注:log_slow_queries = /tmp/mysql.slow # ...
 - ubuntu linux 1604 编译安装tesseract-ocr 4.0
			
主要参考官方的编译,梳理一下整个流程 Linux The build instructions for Linux also apply to other UNIX like operating sy ...
 - Android Gradle 构建工具(Android Gradle Build Tools)是什么?
			
转载地址:http://mrfu.me/android/2015/07/17/New_Android_Gradle_Build_Tools/ 译者地址:[翻]一览新的 Android Gradle 构 ...