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 中间件 中间件介绍 前戏 之前在判断登录的时候使用的是装饰器的功能,通过给视图函数加装饰器来增加判断是否登录的功能.但此方法的缺点是必须给每个需要判断登录的视 ...
随机推荐
- 4th 课堂SCRM会议旁观记录
项目名称:基于C#的连连看设计 小组名称:待定 小组成员:张政.张金生.武志远.李权 Master:张政 项目已完成部分: 现阶段已经实现了一定的功能,可以运行使用,进行第一关的游戏. 今天计划要完成 ...
- PAT 甲级 1081 Rational Sum (数据不严谨 点名批评)
https://pintia.cn/problem-sets/994805342720868352/problems/994805386161274880 Given N rational numbe ...
- ADOQuery的ltBatchOptimistic状态下的用法
在ADO的ltBatchOptimistic状态下(即缓存状态),如何实现单条记录的删除与修改,也可以选择的删除或修改? 一样的删除,只是最后提交方式不一样,以前的提交最后加上try ADOCon ...
- 第93天:CSS3 中边框详解
CSS3 边框详解 其中边框圆角.边框阴影属性,应用十分广泛,兼容性也相对较好,具有符合渐进增强原则的特征,我们需要重点掌握. 一.边框圆角 border-radius 每个角可以设置两个值 ...
- java map 当key相同的时候 最后一个覆盖最近的一个值
- 【bzoj5130】[Lydsy12月赛]字符串的周期 DFS+KMP
题目描述 给定 $n$ 和 $m$ ,求所有 长度为 $n$ ,字符集大小为 $m$ 的字符串,每个前缀的最短循环节长度乘积 的总和. $n\le 12,m\le 10^9$ 题解 DFS+KMP 对 ...
- 转---秒杀多线程第十二篇 多线程同步内功心法——PV操作上 (续)
PV操作的核心就是 PV操作可以同时起到同步与互斥的作用. 1.同步就是通过P操作获取信号量,V操作释放信号量来进行. 2.互斥其实就是,同时操作P操作,结束后进行V操作即可做到. Java上实现PV ...
- hive 连接(join)查询
1.内连接 hive> select b.*,a.name from userinfo2 b,userinfo a where a.userid=b.userid; hive> selec ...
- [HNOI2014]江南乐 博弈论
题面 题面 题解 首先我们知道一个关于除法的重要性质:对于一个固定的\(i\),表达式\(\frac{i}{m}\)的取值只有根号个. 因此我们考虑如何优化SG函数的求解. 观察到在取值相同的同一段中 ...
- 【BZOJ4405】【WC2016】挑战NPC(带花树)
[BZOJ4405][WC2016]挑战NPC(带花树) 题面 BZOJ 洛谷 Uoj Description 小N最近在研究NP完全问题,小O看小N研究得热火朝天,便给他出了一道这样的题目: 有n个 ...