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中间件的更多相关文章

  1. Django分析之Middleware中间件

    写了几周的脚本,今天终于开始接触web框架了~学习Python的web框架,那么Django就几乎是必修课了,这次的工作是先打打下手,主要的任务是在setting中添加版本号,在渲染静态css,js的 ...

  2. Django中Middleware中间件

    Django中Middleware中间件 1 Middleware中间件概述 django中间middleware实质就是一个类,django会根据自己的规则在合适的时机执行中间件相应的方法.实际上当 ...

  3. Django中的Session和cookie

    Session和cookie 参考文献:https://www.cnblogs.com/wupeiqi/articles/5246483.html 1.问题引入 1.1 cookie是什么? 保存在客 ...

  4. Django中的中间件(middleware)

    中间件: 在研究中间件的时候我们首先要知道 1 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Djang ...

  5. Django 中CSRF中间件 'django.middleware.csrf.CsrfViewMiddleware',

    1.Django中CSRF中间件的工作原理及form表单提交需要添加{% csrf_token %}防止出现403错误 CSRF # 表示django全局发送post请求均需要字符串验证功能:防止跨站 ...

  6. [Django高级]理解django中的中间件机制和执行顺序

    原文来自 Understanding Django Middlewares, 这篇文章从整体上介绍了django中中间件定义,作用,和怎么样自己写中间件 –orangleliu. 注:middlewa ...

  7. django中的中间件

    中间件介绍 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出.每个中间件组件都负责 ...

  8. django中的中间件机制和执行顺序

    这片文章将讨论下面内容: 1.什么是middleware 2.什么时候使用middleware 3.我们写middleware必须要记住的东西 4.写一些middlewares来理解中间件的工作过程和 ...

  9. Django 中的中间件

    Django 中的中间件 Django  中间件 中间件介绍 前戏 之前在判断登录的时候使用的是装饰器的功能,通过给视图函数加装饰器来增加判断是否登录的功能.但此方法的缺点是必须给每个需要判断登录的视 ...

随机推荐

  1. 关于command 'gcc' failed with exit status 1 解决方法

    Python踩坑之路 Setup script exited with error: command 'gcc' failed with exit status 1 由于没有正确安装Python开发环 ...

  2. 图解用HTML5的popstate如何玩转浏览器历史记录

    一.popstate用来做什么的?简而言之就是HTML5新增的用来控制浏览器历史记录的api. 二.过去如何操纵浏览器历史记录? window.history对象,该对象上包含有length和stat ...

  3. mvc4中使用angularjs实现一个投票系统

    数据库是用EF操作,数据表都很简单中,从代码中也能猜出表的结构,所以关于数据库表就不列出了 投票系统实现还是比较简单,投票部分使用ajax实现,评论部分是使用angularjs实现,并且页面每隔几秒( ...

  4. Matrix Walk CodeForces - 954C

    题意: 就是给出一连串的数字 这些数字是从第一个数字依次走过的 emm..就是这样..  然后让你判断这个矩阵是否存在  如果存在输出行和列的数量  其中行..开到最大就好了...主要是判断列 在输入 ...

  5. lxm --- ans lb config

    lxm --- ans lb config #ANS2.2 Build 160.006 # Last modified by `save config`, Fri Oct 12 17:15:42 20 ...

  6. QT样式表

    QT样式表 一.QT样式表简介 1.QT样式表简介 QSS的主要功能是使界面的表现与界面的元素分离,使得设计皮肤与界面控件分离的软件成为可能. QT样式表是允许用户定制widgets组件外观的强大机制 ...

  7. 使当前对象相对于上层DIV 水平、垂直居中定位

    <!doctype html> <html> <head> <meta http-equiv="content-type" content ...

  8. CentOS 7网络故障

    By francis_hao    Nov 2,2017   在像往常一样打开了虚拟机后,打开xshell准备连接到centos,可是连不上,发现连接的网卡没有启动,使用systemctl启动netw ...

  9. poj1204 Word Puzzles

    Word Puzzles Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 12090   Accepted: 4547   S ...

  10. linux jq命令小结

    http://note.youdao.com/noteshare?id=0d84ff04edcaa0be512eb0c1e5c41f47