码迷,mamicode.com
首页 > 其他好文 > 详细

Django之 中间件

时间:2018-01-29 20:11:30      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:import   print   ...   必须   code   auth   引入   def   ati   

中间件 

介绍

中间件顾名思义,是介于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,

]

自定义django中间件

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

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

二、中间件执行顺序

1、中间件被执行的顺序技术分享图片

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

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

views函数:

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

中间件:

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse

class Md1(MiddlewareMixin):

    def process_request(self,request):
        print("Md1请求")
        #return HttpResponse("Md1中断")
    def process_response(self,request,response):
        print("Md1返回")
        return response

class Md2(MiddlewareMixin):

    def process_request(self,request):
        print("Md2请求")
    def process_response(self,request,response):
        print("Md2返回")
        return response

此时输出结果顺序为:

Django之 中间件

标签:import   print   ...   必须   code   auth   引入   def   ati   

原文地址:https://www.cnblogs.com/jassin-du/p/8379173.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!