zoukankan      html  css  js  c++  java
  • django 中间件

    django中间件是一个类,在请求到来和结束后,django会根据自己的规则在合适的的时机执行中间件中对应的方法。请求传递到django的过程如下:

    请求都是先通过中间件的process_request函数,这个函数返回None或者HttpResponse对象,如果返回前者继续处理其他中间件,如果返回一个HttpResponse,就处理中止,返回到网页上。

    在settings.py中可以查看django中的中间件,也可以自定义中间件,自定义中间件需继承MiddlewareMixin,需要导入

    from django.utils import deprecation

    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',
        'mymiddle.mymiddleware.MyMiddle',
        'mymiddle.mymiddleware.MyMiddle2',
    ]

    在app目录下新建mymiddle文件夹,创建mymiddleware.py

    from django.http.response import HttpResponse
    from django.utils import deprecation
    class MyMiddle(deprecation.MiddlewareMixin):
            def process_request(self,request):
                    print('1.process_request')
            def process_view(self,request,callback,callback_args,callback_kwargs):
                    print('1.process_view')
            def process_exception(self,request,exception):
                    print('1.process_exception')
            def process_response(self,request,response):
                    print('1.process_response')
                    return response
    
    class MyMiddle2(deprecation.MiddlewareMixin):
            def process_request(self,request):
                    print('2.process_request')
            def process_view(self,request,callback,callback_args,callback_kwargs):
                    print('2.process_view')
            def process_exception(self,request,exception):
                    print('2.process_exception')
            def process_response(self,request,response):
                    print('2.process_response')
                    return response

    运行效果

    可以看到请求的流程

    当最后一个中间的process_request到达路由关系映射之后,返回到中间件1的process_view,然后依次往下,到达views函数,最后通过process_response依次返回到达用户。

    总结:

      中间件中定义的方法:

        process_request(self,request)

        process_view(self,request,callback,callback_args,callback_kwargs)

        process_exception(self,request,exception)    //当views的函数中出现错误时,就会执行process_exception方法

        process_response(self,request,response)    

        process_template_response(self,request,response)   //只有当views函数中返回的对象中具有render方法,是就会直接process_template_responseprocess

      参考链接:

        https://www.cnblogs.com/zhaof/p/6281541.html

        https://www.cnblogs.com/xone/p/6734408.html

  • 相关阅读:
    协方差的意义
    ios7新特性实践
    微信支付大盗--黑色产业链
    UVA 297 Quadtrees(四叉树建树、合并与遍历)
    HDU 2876 Ellipse, again and again
    java中接口的定义与实现
    Oracle Linux 6.3下安装Oracle 11g R2(11.2.0.3)
    Fortran使用隐形DO循环和reshape给一维和多维数组赋初值
    Java实现 蓝桥杯VIP 算法训练 成绩的等级输出
    Java实现 蓝桥杯VIP 算法训练 成绩的等级输出
  • 原文地址:https://www.cnblogs.com/homle/p/8660995.html
Copyright © 2011-2022 走看看