zoukankan      html  css  js  c++  java
  • Django中间件执行流程和CSRF验证

    中间件执行流程

    django的中间件是一个轻量级的插件,可以改变django的输入和输出,中间件共有5种方法,分别为:

    • process_request(self,request)
    • process_view(self, request, callback, callback_args, callback_kwargs)
    • process_template_response(self,request,response)
    • process_exception(self, request, exception)
    • process_response(self, request, response)

    前两个方法 都是自上而下的执行每个中间件,后面的三个都是反着来的

    CSRF验证

    django的CSRF是基于中间件来实现的,而且是放在中间件中的view方法中,原因是:django的中间件是作用于全局的,但是某些情况某个函数可能不需要用到CSRF验证,所以在执行路由匹配的时候找到视图函数,看看他是否需要用到CSRF认证,如果不需要则会跳过CSRF。

    免除认证的方法:

    # FBV
    from django.views.decorators.csrf import csrf_exempt
    @csrf_exempt
    def test(request):
        pass
    
    # 在CBV的方式中,单独给某个方法通过装饰器来免除是无效的,需要加到dispatch函数上面
    
    # 方法1
    from django.views.decorators.csrf import csrf_exempt
    from django.utils.decorators import method_decorator
    class Test1(APIView):
        @method_decorator(csrf_exempt)
        def dispatch(self, request, *args, **kwargs):
            ret = super(Test1,self).dispatch(request, *args, **kwargs)
            return ret
    
    # 方法2
    @method_decorator(csrf_exempt,name='dispatch')
    class Test2(APIView):
        pass
    
    

    单独想用CSRF的方法:

    # 1.去掉setting中CSRF中间件
    from django.views.decorators.csrf import csrf_protect
    @csrf_protect
    def test(request):
        pass
  • 相关阅读:
    solidworks 学习 (二)洗手液瓶
    solidworks 学习 (一)螺丝刀
    tensorflow 2.0 学习(三)MNIST训练
    tensorflow 2.0 学习(二)线性回归问题
    tensorflow 2.0 学习(一)准备
    sscanf linux-c从一个字符串中读进与指定格式相符的数据
    Linux-c glib库hash表GHashTable介绍
    Linux-c给线程取名字
    linux-c getopt()参数处理函数
    golang Linux下编译环境搭建
  • 原文地址:https://www.cnblogs.com/FanMLei/p/10500977.html
Copyright © 2011-2022 走看看