无法在django 1.10中禁用CSRF检查

时间:2017-09-10 13:46:12

标签: python django

我正在为我的项目使用django-1.10,我希望在我的项目中禁用CSRF检查。为此,我所做的是创建了一个CSRFDiable中间件,并在FRAME_OF_GRAYPIC = 38 64 107 63 27 132 148 160 88 59 102 69 81 14 108 76 58 49 55 51 19 158 52 100 153 39 79 139 12 115 147 154 96 112 82 73 159 146 93 169 2 71 25 33 149 138 150 129 117 65 97 17 43 111 37 142 0 0 0 0 0 128 84 86 22 9 137 127 45 0 0 0 0 0 68 28 46 163 42 11 31 29 0 0 0 0 0 152 3 85 36 50 110 165 18 0 0 0 0 0 144 143 44 109 114 133 1 122 0 0 0 0 0 80 167 157 145 24 116 60 130 53 77 156 35 6 78 90 30 140 74 120 40 26 106 166 121 34 98 57 56 13 48 8 155 4 16 124 75 123 23 105 66 7 141 70 89 113 99 101 54 20 94 72 83 168 61 5 10 之后将其添加到中间件中。这个过程在django 1.8中对我有用,但在django 1.10中它不起作用。我也尝试删除CommonMiddleWare,但它对我不起作用。中间件类如下

django.middleware.csrf.CsrfViewMiddleware

我遇到的class DisableCSRF(object): def __init__(self, get_response): self.get_response = get_response def __call__(self, request): return self.get_response(request) def process_request(self, request): setattr(request, '_dont_enforce_csrf_checks', True) MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'common.middlewares.DisableCSRF', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] 请求错误是

POST

1 个答案:

答案 0 :(得分:0)

全局禁用csrf protection不是一个好主意。但是,如果您仍想为基于CSRF的API停用rest-framework,那么您可以执行的操作就是覆盖SessionAuthentication django-rest-framework类,将其添加到{{1} }} django-rest-framework设置已完成。你可以这样做

DEFAULT_AUTHENTICATION_CLASSES

并在rest_framework的设置中添加

from rest_framework.authentication import SessionAuthentication 

class CsrfExemptSessionAuthentication(SessionAuthentication):

    def enforce_csrf(self, request):
        return  # it will not perform any csrf check

我希望它对你有用

或者您可以使用REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'path of .CsrfExemptSessionAuthentication', # path of CsrfExemptSessionAuthentication class 'rest_framework.authentication.BasicAuthentication' ), }