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校验

 

posted @ 2019-04-12 22:08  烧刘病  阅读(131)  评论(0)    收藏  举报
回到页首