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 中间件 中间件介绍 前戏 之前在判断登录的时候使用的是装饰器的功能,通过给视图函数加装饰器来增加判断是否登录的功能.但此方法的缺点是必须给每个需要判断登录的视 ...
随机推荐
- UserAgent 设置 php 抓取网页
转载:http://www.webkaka.com/tutorial/php/2013/111846/ hp抓取网页,可谓轻而易举,几行代码就可以搞定.不过,如果你有所疏忽,程序写得不够严密,就会出现 ...
- redis 同步化操作
异步化操作是很麻烦的的.不好控.下面介绍个同步化的库bluebird.用法很简单.看下你还子就知道了 const redis = require('redis'); const bluebird = ...
- PHP与类有关的几个魔术方法
与类有关的其他魔术方法 序列化与反序列化技术 含义: 序列化: 就是将一个变量所代表的“内存”数据,转换为“字符串”形式并持久保存在硬盘上的一种做法. 反序列化: 就是将序列化之后保存在硬盘上的“字符 ...
- 常用的Redis客户端的并发模型(转)
伪代码模型 # get lock : timestamp = current Unix time + lock = SETNX lock.foo timestamp or (now() > ...
- 第191天:js---Array常用属性和方法总结
Array---常用属性和方法总结 1.Array对象构造函数 /*Array对象构造函数*/ /*组合记忆 shift unshift pop push 添加和删除 shift unshift 从数 ...
- get 与 next()
- Connections between cities HDU - 2874(最短路树 lca )
题意: 给出n个点m条边的图,c次询问 求询问中两个点间的最短距离. 解析: Floyd会T,所以用到了最短路树..具体思想为: 设k为u和v的最近公共祖先 d[i] 为祖结点到i的最短距离 则di ...
- python基础----面向对象的程序设计(五个阶段、对小白的忠告、关于OOP常用术语)、类、对象
一.面向对象的软件开发有如下几个阶段 1.面向对象分析(object oriented analysis ,O ...
- phonegap(cordova)从手机app跳转到web页面在跳转回APP本地页面思路
项目中需要用到 WAP支付宝支付. 但是 使用PHONEGAP开发 跳转到支付宝支付,然后跳转回来 就回不到APP的本地页面, 就是使用WAP的第三方登录也是一样的.很难从WAP页面在跳转到 app本 ...
- poj3469 Dual Core CPU
Dual Core CPU Time Limit: 15000MS Memory Limit: 131072K Total Submissions: 25576 Accepted: 11033 ...