首先这是5个中间件 常用的是前面3个,后面是报错的情况下才会走
CSRF是在
process_view
的时候执行校验,process_request
的时候会优先判断过滤条件【是否使用了csrf_exempt, csrf_protect
】
适用于CBV 与 FBV 两种开发模式
'''注释掉setting中的csrf中间件'''
# 'django.middleware.csrf.CsrfViewMiddleware',
csrf_exempt
与 csrf_protect
过滤
FBV开发模式过滤
from django.vews.decorators.ccsrf import csrf_exempt, csrf_protect
@ csrf_exempt
def login(request):
....
'''单独过滤该视图函数不用csrf'''
@ csrf_protect
def login(request):
....
'''在注释掉中间件的情况下,单独指定该视图使用csrf'''
CBV开发模式过滤
from django.views import View
from django.views.decorators.ccsrf import csrf_exempt, csrf_protect
from django.utils.decorators import method_decorator
'''方法1'''
class Login(View):
# 注意:必须放在dispatch上【源码中反射处理的函数】,单独方法是无效的!!
@ method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return super(Login, self).dispatch(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return HttpResponse('POST')
'''方法2【推荐】'''
@ method_decorator(csrf_exempt, name=dispatch) # dispatch是源码中反射处理的函数
class Login(View):
def post(self, request, *args, **kwargs):
return HttpResponse('POST')