我正在为我的项目使用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
答案 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'
),
}
。