CSRF
from django.views.decorators.csrf import csrf_exempt,csrf_protect
- csrf_protect 加在视图上,表示当前视图进行csrf校验
CBV情况,csrf_exempt装饰器要加在dispatch上
从cookie中获取csrftoken的值 —— 》 request.META['CSRF_COOKIE']
- process_view:
- 判断视图是否加上csrf_exempt,
- 有就不在进行csrf校验
- 没有继续进行校验
- 判断请求方式是'GET', 'HEAD', 'OPTIONS', 'TRACE',
- 是的话,不进行校验
- 不是的话,进行校验
3.进行校验的:
1、
csrf_token = request.META.get('CSRF_COOKIE') # csrf_token = cookie中获取csrftoken的值
2、
先尝试从request.POST获取csrfmiddlewaretoken对应的值 request_csrf_token = request.POST.get('csrfmiddlewaretoken', '') # 获取隐藏标签的csrfmiddlewaretoken对应的值 再尝试从请求头中获取X-csrftoken的值 request_csrf_token = request.META.get(settings.CSRF_HEADER_NAME, '')
-
对比成功,校验成功
-
对比不成功,校验失败,拒绝