Django-中间件Middleware

时间:2025-02-23 18:24:45

Django-中间件

  • Djano中间件流程
    • django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。请求过来,先经过所有的process_request(),到视图函数后,经过所有的process_response返回。
    • 但是如果中某一个process_request()有了返回值,找到它自己所对应的process_respons()直接返回。
    • 1.10版本之后都是这样的流程,之前的版本,如果process_request()有了返回值,会到最后一个process_respons(),然后返回 。

5个方法

  • process_request()、process_response()
# 

from  import MiddlewareMixin
class M1(MiddlewareMixin):
    def process_request(self,request):
        print('m1.process_request')
    def process_response(self,request,response):
        print('m1.process_response')
        return response

class M2(MiddlewareMixin):
    def process_request(self, request):
        print('m2.process_request')
    def process_response(self, request, response):
        print('m2.process_response')
        return response

# 


MIDDLEWARE = [
    '',
    ..........
    'md.M1',
    'md.M2',
]


# 

def test(request):
    print('ok')
    return HttpResponse('ok')


# 输出结果

m1.process_request
m2.process_request
ok
m2.process_response
m1.process_response

  • process_view()
# 

from  import MiddlewareMixin

class M1(MiddlewareMixin):
    def process_request(self,request):
        print('m1.process_request')
    def process_view(self, request, callback, callback_args, callback_kwargs):
        print('m1.process_view')
    def process_response(self,request,response):
        print('m1.process_response')
        return response


class M2(MiddlewareMixin):
    def process_request(self, request):
        print('m2.process_request')
    def process_response(self, request, response):
        print('m2.process_response')
        return response

# 输出结果
m1.process_request
m2.process_request
m1.process_view
ok
m2.process_response
m1.process_response
# 
from  import MiddlewareMixin

class M1(MiddlewareMixin):
    def process_request(self,request):
        print('m1.process_request')
    def process_view(self, request, callback, callback_args, callback_kwargs):
        print('m1.process_view')
    def process_response(self,request,response):
        print('m1.process_response')
        return response


class M2(MiddlewareMixin):
    def process_request(self, request):
        print('m2.process_request')
    def process_view(self, request, callback, callback_args, callback_kwargs):
        print('m2.process_view')
    def process_response(self, request, response):
        print('m2.process_response')
        return response
# 输出结果
m1.process_request
m2.process_request
m1.process_view
m2.process_view
ok
m2.process_response
m1.process_response

# 
from  import MiddlewareMixin

class M1(MiddlewareMixin):
    def process_request(self,request):
        print('m1.process_request')
    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.process_response')
        return response


class M2(MiddlewareMixin):
    def process_request(self, request):
        print('m2.process_request')
    def process_view(self, request, callback, callback_args, callback_kwargs):
        print('m2.process_view')
    def process_response(self, request, response):
        print('m2.process_response')
        return response
# 输出结果
m1.process_request
m2.process_request
m1.process_view
ok
m2.process_response
m1.process_response

  • process_exception()
#  在视图函数中添加错误进行测试

def test(request):

    print('ok')
    int('test')
    return HttpResponse('ok')

# 
from  import MiddlewareMixin

class M1(MiddlewareMixin):
    def process_request(self,request):
        print('m1.process_request')
    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.process_response')
        return response
    def process_exception(self, request, exception):
        print('m1.process_exception')


class M2(MiddlewareMixin):
    def process_request(self, request):
        print('m2.process_request')
    def process_view(self, request, callback, callback_args, callback_kwargs):
        print('m2.process_view')
    def process_response(self, request, response):
        print('m2.process_response')
        return response
    def process_exception(self, request, exception):
        print('m2.process_exception')
# 输出结果
m1.process_request
m2.process_request
m1.process_view
m2.process_view
ok
m2.process_exception
m1.process_exception
m2.process_response
m1.process_response

应用

from  import MiddlewareMixin
from  import HttpResponse
class M1(MiddlewareMixin):
    def process_request(self,request):
        print('m1.process_request')
    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.process_response')
        return response
    def process_exception(self, request, exception):
        print('m1.process_exception')


class M2(MiddlewareMixin):
    def process_request(self, request):
        print('m2.process_request')
    def process_view(self, request, callback, callback_args, callback_kwargs):
        print('m2.process_view')
    def process_response(self, request, response):
        print('m2.process_response')
        return response
    def process_exception(self, request, exception):
        print('m2.process_exception')
        return HttpResponse('有错误!')


# 不会报错

# 输出结果
m1.process_request
m2.process_request
m1.process_view
m2.process_view
ok
m2.process_exception
m2.process_response
m1.process_response

  • process_template_response()
# 对视图函数的返回值有一定的要求,在函数返回值中有render方法才执行。

# 
from  import render,redirect,HttpResponse

# Create your views here.

class JsonResponse:
    def __init__(self,req,status,msg):
         = req
         = status
         = msg
    def render(self):
        import json
        ret = {
            'status': ,
            'msg': 

        }
        return HttpResponse((ret))

def test(request):

    return JsonResponse(request,True,'错误信息!')

# 
from  import MiddlewareMixin
from  import HttpResponse
class M1(MiddlewareMixin):
    def process_request(self,request):
        print('m1.process_request')
    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.process_response')
        return response
    def process_exception(self, request, exception):
        print('m1.process_exception')
    def process_template_response(self,request,response):
        print('m1.process_template_response')
        return response

class M2(MiddlewareMixin):
    def process_request(self, request):
        print('m2.process_request')
    def process_view(self, request, callback, callback_args, callback_kwargs):
        print('m2.process_view')
    def process_response(self, request, response):
        print('m2.process_response')
        return response
    def process_exception(self, request, exception):
        print('m2.process_exception')
        return HttpResponse('有错误!')


# 输出结果

m1.process_request
m2.process_request
m1.process_view
m2.process_view
m1.process_template_response
m2.process_response
m1.process_response