博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django之 中间件
阅读量:7049 次
发布时间:2019-06-28

本文共 2299 字,大约阅读时间需要 7 分钟。

中间件 

介绍

中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。如果你想修改请求,例如被传送到view中的HttpRequest对象。 或者你想修改view返回的HttpResponse对象,这些都可以通过中间件来实现。可能你还想在view执行之前做一些操作,这种情况就可以用 middleware来实现。django中自带如下7个中间件,在setting配置可见,如下:

MIDDLEWARE = [    'django.middleware.security.SecurityMiddleware',    'django.contrib.sessions.middleware.SessionMiddleware',    'django.middleware.common.CommonMiddleware',    'django.middleware.csrf.CsrfViewMiddleware',    'django.contrib.auth.middleware.AuthenticationMiddleware',    'django.contrib.messages.middleware.MessageMiddleware',    'django.middleware.clickjacking.XFrameOptionsMiddleware',]

概念

中间件是一个类(类里面可以定义方法)

方法(待补充):

proces_request(返回值可有可无),process_response(必须设置返回值:response)

定义

以后想要对所有的请求做统一操作时,用中间件。

只是对少量的视图函数做操作时,用装饰器。

Django的请求生命周期

自定义django中间件

  除了django自带如上7种中间件,我们为了满足自己的需求,也可自定义中间件,中间件就是定义一个类,类的下面有四个方法,分别为process_request、process_view、process_exception及process_response,但此类必须但是必须继承MiddlewareMixin,引入方式如下:django.utils.deprecation import MiddlewareMixin。

  自定义中间件实例如下,中间件.py文件必须放在django项目的根目录下,中间件的配置方式与自带中间件配置方式一致。如下实例:

 

中间件执行顺序

 

中间件被执行的顺序

  如上,中间件的执行顺序是按照如上中间件配置顺序执行的,从上到下,依次执行中间件中的process_request函数,然后根据url执行所有views视图函数,视图函数执行完后,再从后依次往前执行process_response函数。

  但是需要注意,如下为请求的视图函数和自定义的中间件:

 

views函数:

def index(request):    print("view函数...")    return HttpResponse("OK")

中间件:

from django.utils.deprecation import MiddlewareMixinfrom django.shortcuts import HttpResponseclass Md1(MiddlewareMixin):    def process_request(self,request):        print("Md1请求")        #return HttpResponse("Md1中断")    def process_response(self,request,response):        print("Md1返回")        return responseclass Md2(MiddlewareMixin):    def process_request(self,request):        print("Md2请求")    def process_response(self,request,response):        print("Md2返回")        return response

此时输出结果顺序为:

Md1请求Md2请求视图函数Md2返回Md1返回

 SessionMiddleware

class Md3(SessionMiddleware):    def process_request(self, request):        print("Md3请求")    def process_response(self, request, response):        print("Md3返回")        return responseclass Md4(SessionMiddleware):    def process_request(self, response):        print("Md4请求")    def process_response(self, request, response):        print("Md4返回")        return response

 

转载于:https://www.cnblogs.com/jassin-du/p/8379173.html

你可能感兴趣的文章
现实中的路由规则,可能比你想象中复杂的多
查看>>
nginx配置gzip中的坑
查看>>
Javascript中的函数声明与函数表达式
查看>>
Python学习笔记 - queue
查看>>
茶器漫谈 高逼格 or 真内涵?
查看>>
HTML5学习之Web Storage基础知识
查看>>
tab切换
查看>>
垃圾回收及内存调试工具的介绍
查看>>
你的接口,真的能承受高并发吗?
查看>>
自定义View实用小技巧
查看>>
iOS CALayer anchorPoint 的应用场景
查看>>
如何變聰明?訓練自己變成結構化思維型的人!- TechMoon 科技月球
查看>>
超好用的VueJs调试工具——vue-devtools
查看>>
到底怎么才算“懂”python的twisted框架?
查看>>
Flutter 基础布局Widgets之Expanded详解
查看>>
spring cloud微服务分布式云架构- Eureka服务器搭建及配置
查看>>
对当前JAVA流行框架的一些小感悟
查看>>
双十一流量洪峰 支撑阿里核心业务的云数据库揭秘
查看>>
adb命令集合
查看>>
命令终端快捷键
查看>>