Я закомментировал строки процессора csrf и промежуточного программного обеспечения в settings.py
:
122
123 TEMPLATE_CONTEXT_PROCESSORS = (
124 'django.contrib.auth.context_processors.auth',
125 # 'django.core.context_processors.csrf',
126 'django.core.context_processors.request',
127 'django.core.context_processors.static',
128 'cyathea.processors.static',
129 )
130
131 MIDDLEWARE_CLASSES = (
132 'django.middleware.common.CommonMiddleware',
133 'django.contrib.sessions.middleware.SessionMiddleware',
134 # 'django.middleware.csrf.CsrfViewMiddleware',
135 'django.contrib.auth.middleware.AuthenticationMiddleware',
136 'django.contrib.messages.middleware.MessageMiddleware',
137 'django.middleware.locale.LocaleMiddleware',
138 # Uncomment the next line for simple clickjacking protection:
139 # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
140 )
Но когда я использую Ajax для отправки запроса, Django по-прежнему отвечает «токен csrf неверен или отсутствует», и после добавления X-CSRFToken в заголовки запрос будет успешным.
Что здесь происходит ?
Ответы:
Если вам просто нужны представления, чтобы не использовать CSRF, вы можете использовать
@csrf_exempt
:Вы можете найти больше примеров и других сценариев в документации Django:
источник
@csrf_exemp
работает, потому что недавно использовал без проблем. Надеюсь, ты найдешь ответ.Чтобы отключить CSRF для представлений на основе классов, у меня сработало следующее.
Использование django 1.10 и python 3.5.2
источник
В
setting.py
MIDDLEWARE вы можете просто удалить / прокомментировать эту строку:источник
Для Django 2 :
Это промежуточное ПО должно быть добавлено,
settings.MIDDLEWARE
когда это необходимо (например, в настройках вашего теста).Примечание: настройка больше не вызывается
MIDDLEWARE_CLASSES
.источник
Ответ может быть неуместным, но я надеюсь, что он вам поможет
Такое промежуточное ПО помогает отлаживать запросы и проверять csrf на производственных серверах.
источник
Проблема здесь в том, что SessionAuthentication выполняет собственную проверку CSRF. Вот почему вы получаете ошибку отсутствия CSRF, даже если промежуточное ПО CSRF прокомментировано. Вы можете добавить @csrf_exempt в каждое представление, но если вы хотите отключить CSRF и иметь аутентификацию сеанса для всего приложения, вы можете добавить дополнительное промежуточное ПО, подобное этому -
Я создал этот класс в myapp / middle.py Затем импортируйте это промежуточное ПО в Middleware в settings.py
Это работает с DRF на django 1.11
источник
Если вы хотите отключить его в Global, вы можете написать собственное промежуточное ПО, например
затем добавьте этот класс
youappname.middlewarefilename.DisableCsrfCheck
вMIDDLEWARE_CLASSES
списки, прежде чемdjango.middleware.csrf.CsrfViewMiddleware
источник
CSRF можно принудительно применить на уровне представления, который нельзя отключить глобально .
В некоторых случаях это неприятно, но "это для безопасности". Надо сохранить эти рейтинги AAA.
https://docs.djangoproject.com/en/dev/ref/csrf/#contrib-and-reusable-apps
источник
@WoooHaaaa некоторые сторонние пакеты используют промежуточное ПО 'django.middleware.csrf.CsrfViewMiddleware'. например, я использую django-rest-oauth, и у меня такая же проблема, как и у вас, даже после отключения этих вещей. возможно, эти пакеты ответили на ваш запрос, как и в моем случае, потому что вы используете декоратор аутентификации и что-то в этом роде.
источник