django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。

1.中间件的方法

process_request(self,request)
process_view(self, request, callback, callback_args, callback_kwargs)
process_template_response(self,request,response)
process_exception(self, request, exception)
process_response(self, request, response)

2.中间件运行机制

  a.玩法1

from  django.utils.deprecation import MiddlewareMixin

class M1(MiddlewareMixin):
    def process_request(self, request):
        print('M1.request') 

    def process_view(self, request,callback,callback_args,callback_kwargs ):
        print("M1.process_view")

    def process_response(self, request, response):
        print('M1.response')
        return response 

class M2(MiddlewareMixin):
    def process_request(self, request):
        print('M2.request') 

    def process_view(self, request,callback,callback_args,callback_kwargs ):
        print("M2.process_view")

    def process_response(self, request, response):
        print('M2.response')
        return response
#### 输出结果
M1.request
M2.request
M1.process_view
M2.process_view
#执行views视图
M2.response
M1.response

  b.玩法2

from  django.utils.deprecation import MiddlewareMixin

class M1(MiddlewareMixin):
    def process_request(self, request):
        print('M1.request')
    # callback视图函数名称 callback_args,callback_kwargs 视图函数执行所需的参数
    def process_view(self, request,callback,callback_args,callback_kwargs ):
        print("M1.process_view")
        response=callback(request,*callback_args,**callback_kwargs)
        return response
    def process_response(self, request, response):
        print('M1.response')
        return response

class M2(MiddlewareMixin):
    def process_request(self, request):
        print('M2.request')  

    def process_view(self, request,callback,callback_args,callback_kwargs ):
        print("M2.process_view")
    def process_response(self, request, response):
        print('M2.response')
        return response
####输出结果
M1.request
M2.request
M1.process_view
#执行views视图函数
M2.response
M1.response

  c.玩法3

创建中间件类:

class Middle_Test(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

注册中间件:

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',
    'sparks.middleware.auth.Middle_Test',
)

python中间件的更多相关文章

  1. python 中间件

    中间件一.什么是中间件 中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django 的输入和输出.每个中间件组件都负责做一些特定的功 ...

  2. Python面试题整理-更新中

    几个链接: 编程零基础应当如何开始学习 Python ? - 路人甲的回答 网易云课堂上有哪些值得推荐的 Python 教程? - 路人甲的回答 怎么用最短时间高效而踏实地学习 Python? - 路 ...

  3. Django基础之MTV模型

    一.Django基础 一.Django简介 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型(Model).视图(View)和控制器(Control ...

  4. python运维开发(二十)----models操作、中间件、缓存、信号、分页

    内容目录 select Form标签数据库操作 models操作F/Q models多对多表操作 Django中间件 缓存 信号 分页 select Form标签补充 在上一节中我们可以知道Form标 ...

  5. python/ Django之中间件

    python/ Django之中间件 一.中间件 中间件共分为: (1)process_request(self,request) (2)process_view(self, request, cal ...

  6. Python Django的分页,Form验证,中间件

    本节内容 Django的分页 Form 中间件 1 Django 分页 1.1 Django自带的分页 1.首先来看下我的测试数据环境 ############ models.py ######### ...

  7. python自动化开发-[第二十一天]-form验证,中间件,缓存,信号,admin后台

    今日概要: 1.form表单进阶 2.中间件 3.缓存 4.信号 5.admin后台 上节课回顾 FBV,CBV 序列化 - Django内置 - json.dumps(xxx,cls=) Form验 ...

  8. python的Web框架,中间件middleware及djangoAdmin

    简介 用于处理request和response的中间处理的函数,可以创建在项目中的任意位置,只要可以导入即可. 建议创建在APP目录下,方便管理. 函数范式与激活 中间件的范式: # 必须接受get_ ...

  9. python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)

    一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 from app01 import views urlpatterns = [ path('admin/', admi ...

随机推荐

  1. [Swing]树形结构的实现

    一般步骤: 1.建立根节点 private DefaultMutableTreeNode root = new DefaultMutableTreeNode("根节点"); 2.建 ...

  2. [acmm week12]染色(容斥定理+组合数+逆元)

    1003 染色         Time Limit: 1sec    Memory Limit:256MB Description 今天离散数学课学了有关树的知识,god_v是个喜欢画画的人,所以他 ...

  3. Spring Cloud全家桶主要组件及简要介绍

    一.微服务简介 微服务是最近的一两年的时间里是很火的一个概念.感觉不学习一下都快跟不上时代的步伐了,下边做一下简单的总结和介绍. 何为微服务?简而言之,微服务架构风格这种开发方法,是以开发一组小型服务 ...

  4. [HNOI2009]有趣的数列 题解(卡特兰数)

    [HNOI2009]有趣的数列 Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满 ...

  5. HDU 2191 珍惜现在,感恩生活 (dp)

    题目链接 Problem Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都 ...

  6. 基于canvas实现的fontawesome动态图标

    由于还没有全部实现,实现了一些demo,demo地址在 https://github.com/jiangzhenfei/canvas-fontawesome 实现了动态loading 实现动态电池充电 ...

  7. webconfig的配置解析

    <?xml version="1.0"?> <!--注意: 除了手动编辑此文件以外,您还可以使用 Web 管理工具来配置应用程序的设置.可以使用 Visual S ...

  8. 【swupdate文档 三】SWUpdate: 嵌入式系统的软件升级

    SWUpdate: 嵌入式系统的软件升级 概述 本项目被认为有助于从存储媒体或网络更新嵌入式系统.但是,它应该主要作为一个框架来考虑,在这个框架中可以方便地向应用程序添加更多的协议或安装程序(在SWU ...

  9. Loadrunner下WebTours系统自带的用户名和密码

    打开:http://127.0.0.1:1080/WebTours/ 系统默认自带两个用户名和密码,位于~\WebTours\MercuryWebTours\users: 1.用户名:joe,密码:y ...

  10. fastJson去掉指定字段

    public static String filterFieldsJson(Object src, Class<?> clazz, String... args) { SimpleProp ...