Django中的MiddleWare中间件
1. middleware简介
Django的middleware的概念相当于SSH框架里面的filter的概念。中间键的作用就是对所有的request,在request前,和在response后做一定的处理。
Django的中间键类型分为五种:
请求(Request)中间件->对应函数process_request
视图(View)中间件->对应函数process_view
模板(Template)中间件->对应函数process_template_response(不常用)
响应(Response)中间件->对应函数process_response
异常(Exception)中间件->对应函数process_exception(不常用)
2. middleware中间键函数的执行顺序和过程
(1)请求(Request)中间件和响应(Response)中间件的正常执行顺序

接下来就用程序演示:
m1.py
from django.utils.deprecation import MiddlewareMixin class ROW1(MiddlewareMixin):
def process_request(self,request):
print("朱三")
def process_response(self,request,response):
print('赵六')
return response class ROW2(MiddlewareMixin):
def process_request(self,request):
print("李四") def process_response(self,request,response):
print('薛七')
return response class ROW3(MiddlewareMixin):
def process_request(self,request):
print("王五")
def process_response(self,request,response):
print('宋八')
return response
views.py
def test(request):
# int("asdsadsad")
print('小猪->没带钱')
return HttpResponse("OK")
所以顺序为:朱三-->李四-->王五-->小猪-->没带钱-->宋八-->薛七-->赵六
如果在中间件中发生错误,那么其执行顺序为

m1.py
from django.utils.deprecation import MiddlewareMixin class ROW1(MiddlewareMixin):
def process_request(self,request):
print("朱三")
def process_response(self,request,response):
print('赵六')
return response from django.shortcuts import HttpResponse
class ROW2(MiddlewareMixin):
def process_request(self,request):
print("李四")
return HttpResponse('离开') def process_response(self,request,response):
print('薛七')
return response class ROW3(MiddlewareMixin):
def process_request(self,request):
print("王五") def process_response(self,request,response):
print('宋八')
return response
views与上面一样,执行顺序为:朱三-->李四-->薛七-->赵六
(2)视图中间件执行顺序

from django.utils.deprecation import MiddlewareMixin class ROW1(MiddlewareMixin):
def process_request(self,request):
print("朱三") def process_response(self,request,response):
print('赵六')
return response def process_view(self, request, veiw_func, veiw_func_args, veiw_func_kwargs):
print('张欣彤') from django.shortcuts import HttpResponse
class ROW2(MiddlewareMixin):
def process_request(self,request):
print("李四") def process_response(self,request,response):
print('薛七')
return response def process_view(self, request, veiw_func, veiw_func_args, veiw_func_kwargs):
print('张需要') class ROW3(MiddlewareMixin):
def process_request(self,request):
print("王五") def process_response(self,request,response):
print('宋八') return response
def process_view(self, request, veiw_func, veiw_func_args, veiw_func_kwargs):
print('邵林')
views.py代码与其最上的views.py代码相同
则执行顺序为:朱三-->李四-->王五-->张欣彤-->张需要-->邵林-->小猪-->没带钱-->宋八-->薛七-->赵六
而模板中间件(函数中出现render才生效)和异常中间价(函数出现错误才生效)因为不常用,默认不生效,所以就不详细介绍了。
3.自定义中间件
(1)创建中间件
class RequestExeute(object):
def process_request(self,request):
pass
def process_view(self, request, callback, callback_args, callback_kwargs):
i =1
pass
def process_exception(self, request, exception):
pass
def process_response(self, request, response):
return response
(2)注册中间件
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'wupeiqi.middleware.auth.RequestExeute',
)
Django中的MiddleWare中间件的更多相关文章
- Django分析之Middleware中间件
写了几周的脚本,今天终于开始接触web框架了~学习Python的web框架,那么Django就几乎是必修课了,这次的工作是先打打下手,主要的任务是在setting中添加版本号,在渲染静态css,js的 ...
- Django中Middleware中间件
Django中Middleware中间件 1 Middleware中间件概述 django中间middleware实质就是一个类,django会根据自己的规则在合适的时机执行中间件相应的方法.实际上当 ...
- Django中的Session和cookie
Session和cookie 参考文献:https://www.cnblogs.com/wupeiqi/articles/5246483.html 1.问题引入 1.1 cookie是什么? 保存在客 ...
- Django中的中间件(middleware)
中间件: 在研究中间件的时候我们首先要知道 1 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Djang ...
- Django 中CSRF中间件 'django.middleware.csrf.CsrfViewMiddleware',
1.Django中CSRF中间件的工作原理及form表单提交需要添加{% csrf_token %}防止出现403错误 CSRF # 表示django全局发送post请求均需要字符串验证功能:防止跨站 ...
- [Django高级]理解django中的中间件机制和执行顺序
原文来自 Understanding Django Middlewares, 这篇文章从整体上介绍了django中中间件定义,作用,和怎么样自己写中间件 –orangleliu. 注:middlewa ...
- django中的中间件
中间件介绍 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出.每个中间件组件都负责 ...
- django中的中间件机制和执行顺序
这片文章将讨论下面内容: 1.什么是middleware 2.什么时候使用middleware 3.我们写middleware必须要记住的东西 4.写一些middlewares来理解中间件的工作过程和 ...
- Django 中的中间件
Django 中的中间件 Django 中间件 中间件介绍 前戏 之前在判断登录的时候使用的是装饰器的功能,通过给视图函数加装饰器来增加判断是否登录的功能.但此方法的缺点是必须给每个需要判断登录的视 ...
随机推荐
- 九度-题目1026:又一版 A+B
http://ac.jobdu.com/problem.php?pid=1026 题目描述: 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m ...
- bzoj5039:[Jsoi2014]序列维护
做做bzoj上的新题(不存在的) 同bzoj1798: [Ahoi2009]维护序列,样例都一样的...我能想象到的唯一的新的考察意义就是模数是2e9不是1e9,于是加法的时候需要转long long ...
- (转)REST无状态的理解
转至http://lelglin.iteye.com/blog/1852092 Representational State Transfer的缩写.我对这个词组的翻译是"表现层状态转化&q ...
- 【NuGet】使用NuGet打包并发布至ProGet过程 (打包再次详解)【下篇】
一.前言 上篇[1]主要介绍了利用csproj文件使用NuGet打包至ProGet的过程,并附上了用于在Jenkins上运行的python脚本.本篇的主要内容分为以下几点: 1. Nuspec与Nup ...
- 【BZOJ3028】食物(生成函数)
[BZOJ3028]食物(生成函数) 题面 一个人要带\(n\)个物品,共有\(8\)种物品,每种的限制分别如下: 偶数个;0/1个;0/1/2个;奇数个; 4的倍数个;0/1/2/3个;0/1个;3 ...
- 【BZOJ3771】Triple(生成函数,多项式运算)
[BZOJ3771]Triple(生成函数,多项式运算) 题面 有\(n\)个价值\(w\)不同的物品 可以任意选择\(1,2,3\)个组合在一起 输出能够组成的所有价值以及方案数. \(n,w< ...
- 51nod 1766 树上的最远点对(线段树)
像树的直径一样,两个集合的最长路也是由两个集合内部的最长路的两个端点组成的,于是我们知道了两个集合的最长路,枚举一下两两端点算出答案就可以合并了,所以就可以用线段树维护一个区间里的最长路了. #inc ...
- 51nod1967 路径定向(欧拉回路+结论题)
看到入度等于出度想到欧拉回路. 我们把边都变成无向边,有一个结论是偶数度的点都可以变成出入度相等的点,而奇数点的不行,感性理解分类讨论一下就知道是对的. 还有一个更好理解的结论是变成无向边后奇数点的个 ...
- oracle中建立job(任务)
--Oracle trunc()函数的用法/**************日期********************/1.select trunc(sysdate) from dual --2013- ...
- winform布局 FlowLayoutPanel的控件
http://www.cnblogs.com/moon-mountain/archive/2011/09/08/2171232.html 1.采用流布局:工具箱里边容器里有一个:FlowLayoutP ...