Я создал проблему, чтобы сообщить об этом: https://github.com/encode/django-rest-framework/issues/6305
Вы можете увидеть исправление здесь, если вам нужен патч быстро: https://github.com/encode/django-rest-framework/pull/6306/files
Подробнее
В выпуске Django Rest Framework 3.9 был введен новый вызов функции в процессе аутентификации:
check = CSRFCheck()
check.process_request(request)
CSRFCheck - это класс, импортированный непосредственно из Django. Метод process_request класса CSRFCheck был добавлен только в версии Django 1.11.6 (и сохранился после этого). Поэтому версия 3.9.0 Django Rest Framework не полностью совместима с Django 1.11.x, но только с 1.11.6 и выше. Существует много решений этой проблемы:
- Обновление до Django 1.11.6 или выше, если возможно
Форк Django Rest Framework и включение следующего патча в метод empce_csrf класса SessionAuthentication (rest_framework / authentication.py):
from django import VERSION as django_version
if tuple(django_version[:3]) < (1, 11, 6):
csrf_token = check._get_token(request)
if csrf_token is not None:
request.META['CSRF_COOKIE'] = csrf_token
else:
check.process_request(request)
Этот патч будет работать для любой версии Django от 1.11.x и выше (по крайней мере, Django 2.0 и 2.1).
Надеюсь, мой патч будет объединен и выпущен в версии 3.9.1 Django Rest Framework. Также имейте в виду, что версия 3.9.0, вероятно, является одной из последних версий, поддерживающих Django 1.11.