Django 4.0.2 | Python 3.9.7 | TypeError: __init__() missing 1 required positional argument: 'get_response'
Django 4.0.2 | Python 3.9.7 | TypeError: __init__() missing 1 required positional argument: '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() 缺少 1 个必需的位置参数:'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()
时,您没有向它提供该参数,因此当它运行时,它会失败。
您可以尝试按照上面 link 中的示例并重新格式化您的自定义中间件以匹配他们提供的示例。
将 Django 版本降级到 3.2.X 直到 bug 修复。
我写了一个自定义的认证,在认证过程中添加了一个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() 缺少 1 个必需的位置参数:'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()
时,您没有向它提供该参数,因此当它运行时,它会失败。
您可以尝试按照上面 link 中的示例并重新格式化您的自定义中间件以匹配他们提供的示例。
将 Django 版本降级到 3.2.X 直到 bug 修复。