django-csrfmiddleware
源码分析
源码见:from django.middleware.csrf import CsrfViewMiddleware from django.conf import global_settings 1.执行process_request方法: 1.获取request.COOKIE的csrftoken 2.设置request.META['CSRF_COOKIE'] = csrf_token 2.执行process_view方法: 1.查看视图是否加了装饰器 有:不校验,直接return None 没有:2.判断请求方式在不在('GET', 'HEAD', 'OPTIONS', 'TRACE')里面 不在:直接retuen None 在:3.进行csrf校验 1.从META中获取csrf_token值 2.请求方式为Post; 1.尝试从表单的隐藏框里面获得'csrfmiddlewaretoken'的值 1.获取成功 校验成功 return None 校验失败 return FORBIDEN 403 2.获取失败 尝试请求头从x-csrftoken中获得HTTP_X_CSRFTOKEN: 校验成功 return None 校验失败 return FORBIDEN 403
csrf相关的装饰器
csrf装饰器: from django.views.decorators.csrf import ensure_csrf_cookie 如果html中没有{% csrf-token %},Django不会设置csrf的cookie 加了装饰器强制设置csrf的cookie from django.views.decorators.csrf import csrf_exempt 免于csrf的中间键,直接return None from django.views.decorators.csrf import csrf_protect 必须要通过csrf校验优质内容筛选与推荐>>