zoukankan      html  css  js  c++  java
  • 自定义中间件

    Diango组件中间件:(每次有请求都会走一遍中间件)

      中间件顾名思义,是介于request与response处理之间的一道处理过程

      如果你想修改请求,例如被传送到view中的HttpRequest对象。 或者你想修改view返回的HttpResponse对象,这些都可以通过中间件来实现。

    可能你还想在view执行之前做一些操作,这种情况就可以用 middleware来实现。

      

    process_request:如果直接有返回值就不继续走下面的中间件了,如果不写return或者return None
      会继续向下走

    class PrintIPMiddleWare(MiddlewareMixin):
        def process_request(self,request):
            print(request.META.get("REMOTE_ADDR"))
            print('M1 process_request')
            # process_requestv  里如果有返回值不会继续向下执行
            return HttpResponse('hahaa')

    #
    response 是上面响应的'hahaa',process里有返回值所以下面的中间件,和视图函数就就不执行了
         def process_response(self,request,response):
          print('M1 process_response')

          return HttpResponse('被我篡改了') # return response
    终端打印:

    127.0.0.1
    M1 process_request
    M1 process_response

     页面打印
    被我篡改了
    process_view:可以提前执行视图函数
    
    process_exception:如果视图那边报错了就走这边
    
    process_response:必须有返回可以篡改返回请求

    from django.utils.deprecation import MiddlewareMixin
    from django.shortcuts import HttpResponse,render
    
    # 需求打印当前请求的ip地址
    # 必须继承这个类
    class PrintIPMiddleWare(MiddlewareMixin):
        def process_request(self,request):
            print(request.META.get("REMOTE_ADDR"))
            print('M1 process_request')
            # process_requestv  里如果有返回值不会继续向下执行
            # return HttpResponse('hahaa')
        def process_response(self,request,response):
            print('M1 process_response')
            # return HttpResponse('被我篡改了')
            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
        # 参数较多
        def process_view(self,request,callback, callback_args, callback_kwargs):
            # callback 对应url映射的视图函数
            print(callback,'M2_process_view')
            # ret=callback(request)
            # return ret
    
    
    class M3(MiddlewareMixin):
        def process_request(self,request):
            print('M3 process_request')
        def process_response(self,request,response):
            print('M3 process_response')
            return response
        def process_view(self,request,callback, callback_args, callback_kwargs):
            # callback 对应url映射的视图函数
            print(callback,'M3_process_view')
            # ret=callback(request)
            # return ret

    结果:

    127.0.0.1
    M1 process_request
    M2 process_request
    M3 process_request
    <function login at 0x000001F8FBE00620> M2_process_view
    <function login at 0x000001F8FBE00620> M3_process_view
    views-login
    M3 process_response
    M2 process_response
    M1 process_response

     
    
    

    
    

    不一定必须有request_response,返回的时候进入中间件没有就继续向上找,response是响应回来的内容
























  • 相关阅读:
    java生成4个不同的随机数
    前端学习(三十二)正则(笔记)
    前端学习(三十一)canvas(笔记)
    前端学习(三十)es6的一些问题(笔记)
    前端学习(二十九)nodejs(笔记)
    前端学习(二十八)es6&ajax(笔记)
    前端学习(二十七)存储&es6(笔记)
    前端学习(二十七)自动构造工具交互(笔记)
    前端学习(二十六)移动端s(笔记)
    前端学习(二十四)一些总结(笔记)
  • 原文地址:https://www.cnblogs.com/2275114213com/p/9890426.html
Copyright © 2011-2022 走看看