Django-website 程序案例系列-13 中间件

自定义中间件1:

from django.utils.deprecation import MiddlewareMixin    # 中间件需要引用的包

class Row1(MiddlewareMixin): #自定义中间件函数       
    def process_request(self, request):
        print('1')
    def process_response(self, request, response):
        print('1')
        return response

class Row2(MiddlewareMixin):  #自定义中间件函数
    def process_request(self, request):
        print('2')
    def process_response(self, request, response):
        print('2')
        return response

class Row3(MiddlewareMixin):  #自定义中间件函数
    def process_request(self, request):
        print('3')
    def process_response(self, request, response):
        print('3')
        return response

views.py

def mid(request):
    print('mei qian')
    return HttpResponse('OK')

  

返回的值: 执行的print反应了中间件的执行顺序如下

 

自定义中间件2:

from django.utils.deprecation import MiddlewareMixin

class Row1(MiddlewareMixin): # 自定义中间件函数
    def process_request(self, request):
        print('1')

    def process_view(self, request, view_func, view_func_args, view_func_kwargs):
        print('11')

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

class Row2(MiddlewareMixin): # 自定义中间件函数
    def process_request(self, request):
        print('2')

    def process_view(self, request, view_func, view_func_args, view_func_kwargs):
        print('22')

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

class Row3(MiddlewareMixin): # 自定义中间件函数
    def process_request(self, request):
        print('3')

    def process_view(self, request, view_func, view_func_args, view_func_kwargs):
        print('33')

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

  

返回的值: 执行的print反应了中间件的执行顺序如下

 

 

自定义中间件3:

在urls.py中加入这个url: url(r'^mid/(?P<nid>\d+)$', views.mid) # nid是传递的参数{nid: 'xxx'}
  def process_view(self, request, view_func, view_func_args, view_func_kwargs):  # nid可传递给中间件中的view_func_kwargs 接收一个键值{nid:'xxx'}      
    print('33')
在urls.py中加入这个url:  url(r'^mid/(\d+)$', views.mid) # 直接传递一个数值参数('3')
  def process_view(self, request, view_func, view_func_args, view_func_kwargs): # 可传递给中间件中函数的view_func_args  接收一个数值参数('3')
     print('33')

  

 

中间件流程图:

中间件中的异常处理:
def process_exception(self, request, exception):  #此函数一般不执行除非中间件发生异常
  print('ex')

中间件的render对象返回:
class
  def render(self):
    return HttpResponse('OK')

def test(request,nid):
  print('2')
  return Foo()

def process_template_response(self,request,response): # 需要view中的函数返回的对象中具有render方法
  print('111')
  return response 
posted @ 2017-12-25 16:50  划得戳  阅读(222)  评论(0编辑  收藏  举报