• Python


    process_view 的执行顺序也是按照 settings.py 中的顺序来执行

    process_view 在 urls.py 的对应关系之后,在执行视图函数之前执行

    如果返回 None,则继续执行后面的中间件的 process_view 函数

    如果返回 HttpResponse,则不执行后续的 process_view 函数,直接跳到第一个 process_response 函数执行

    middleware_test.py:

    from django.utils.deprecation import MiddlewareMixin
    from django.shortcuts import HttpResponse
    
    
    class Test(MiddlewareMixin):
        def process_request(self, request):
            print("这是一个中间件 --> test")
    
        def process_response(self, request, response):
            print("这里是 Test 的 HttpResponse")
            return HttpResponse("这是 Test 返回的 HttpResponse")
    
        def process_view(self, request, view_func, view_args, view_kwargs):
            '''
            :param request: 浏览器发来的 request 请求对象
            :param view_func: 将要执行的视图函数的名字
            :param view_args: 将要执行的视图函数的位置参数
            :param view_kwargs: 将要执行的视图函数的关键字参数
            :return:
            '''
            print("这里是 Test 的 process_view 函数")
            print(view_func, type(view_func))
    
    
    class Test2(MiddlewareMixin):
        def process_request(self, request):
            print("这是一个中间件 --> test2")
    
        def process_response(self, request, response):
            print("这里是 Test2 的 HttpResponse")
            return HttpResponse("这是 Test2 返回的 HttpResponse")
    
        def process_view(selfm, request, view_func, view_args, view_kwargs):
            print("这个是 Test2 的 process_view 函数")
            print(view_func, type(view_func))
    

    views.py:

    from django.shortcuts import HttpResponse
    
    
    def index(request):
        print("这里是 index 页面")
        return HttpResponse("这里是主页面 index")
    

    访问,http://127.0.0.1:8000/index/

    运行结果:

    执行流程:

    首先执行 process_request 函数,然后在执行视图函数之前执行 process_view 函数,然后执行视图函数,最后执行 process_response 函数

    process_request 只返回 None,都执行完之后,就匹配路由,找到要执行的视图函数,在执行视图函数之前先执行中间件的 process_view 函数

    如果 process_view 返回 None,就继续执行后续的中间件的 process_view 方法,执行完所有的 process_view 函数之后就执行视图函数

    如果其中有个 process_view 返回了 HttpResponse,就不执行后续的 process_view 函数,会跳到第一个 process_response 函数,并继续往下执行

    例如,中间件 3 的 process_view 返回了 HttpResponse,就不再执行后续的中间件 4、5、6 的中间件了,直接跳到中间件 6 的 process_response 函数,并接着执行中间件 5、4、3、2、1

    如果有 process_request 函数返回了 HttpResponse 对象,就不执行后续的 process_request 函数,也不执行 process_view 函数,直接跳转到相应的 process_response 函数执行

  • 相关阅读:
    ICEY修改实现ICEY锁血,修改data文件实现主之名关卡重现,顺便改金币
    gg修改器修改聚爆
    MOUSE_OVER 与 ROLL_OVER
    Tween 没有完毕 就停止
    如何将FLex AIR运行环境与AIR程序一起打包(转http://www.awsws.com/?p=94)
    做项目如做人
    flex 打开外部的swf 并调用其方法
    air 零散知识
    贝塞尔曲线的绘制
    air 读取sqlite的Date类型 解决方案
  • 原文地址:https://www.cnblogs.com/sch01ar/p/11516813.html
Copyright © 2020-2023  润新知