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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值