django中间件:

  • process_request
  • process_view
  • process_response
  • process_exception
  • process_render_template

中间件的作用:

权限
用户登录验证
CSRF token
process_view方法
检查视图是否被@csrf_exempt(免除csrf认证)
去请求体或cookie中获取token

FBV中加装饰器

  1. from django.views.decorators.csrf import csrf_exempt, csrf_protect
  2. # 免除csrf token验证的装饰器
  3. @csrf_exempt
  4. def users(request):
  5. pass
  6. # 全局不开启csrf,只有加此装饰器的才开启csrf token验证
  7. @csrf_protect
  8. def groups(request):
  9. pass

CBV中加装饰器

  1. from django.views.decorators.csrf import csrf_exempt, csrf_protect
  2. from django.utils.decorators import method_decorator
  3. # 方法一
  4. class StudentsView(View):
  5. # 把csrf_exempt当做参数传给method_decorator装饰器,并且只能加在dispatch方法上
  6. @method_decorator(csrf_exempt)
  7. def dispatch(self, request, *args, **kwargs):
  8. return super(StudentsView, self).dispatch(request, *args, **kwargs)
  9. def post(self, request, *args, **kwargs):
  10. return HttpResponse('POST')
  11. # 方法二
  12. @method_decorator(csrf_exempt, name='dispatch')
  13. class StudentsView(View):
  14. def dispatch(self, request, *args, **kwargs):
  15. return super(StudentsView, self).dispatch(request, *args, **kwargs)
  16. def post(self, request, *args, **kwargs):
  17. return HttpResponse('POST')