Django 4.0.2 | Python 3.9.7 | TypeError: __init__() отсутствует 1 необходимый позиционный аргумент: 'get_response'
Я написал пользовательскую аутентификацию и добавил промежуточное программное обеспечение для проверки csrf в процессе аутентификации. Я вызываю следующую функцию в функции аутентификации.
def enforce_csrf(self, request):
"""
Enforce CSRF validation
"""
check = CSRFCheck()
check.process_request(request)
reason = check.process_view(request, None, (), {})
if reason:
# CSRF failed, bail with explicit error message
raise PermissionDenied('CSRF Failed: %s' % reason)
Функция CSRFCheck() является пользовательской промежуточной программой и выглядит следующим образом.
class CSRFCheck(CsrfViewMiddleware):
def _reject(self, request, reason):
return reason
Теперь, когда я пытаюсь обработать запрос, который требует аутентификации, я получаю ошибку:
TypeError: init() missing 1 required positional argument: 'get_response'
тот же код прекрасно работает в Django 3.2
Теперь, насколько я смог отладить, функция CSRFCheck ожидает метод get_response, который я не знаю, откуда берется.

Похоже, что API для создания пользовательского промежуточного ПО заключается в том, что вы предоставляете параметр get_response при инициализации.
https://docs.djangoproject.com/en/4.0/topics/http/middleware/#writing-your-own-middleware
Когда вы вызываете CSRFCheck(), вы не предоставляете ему этот параметр, поэтому, когда он запускается, он терпит неудачу.
Вы можете попробовать следовать примеру, приведенному в ссылке выше, и переформатировать ваше пользовательское промежуточное ПО в соответствии с приведенным примером.
Понизьте версию Django до 3.2.X, пока ошибка не будет исправлена.