【问题标题】:What does TypeError, __init__() missing 1 required positional argument: 'get_response' mean in python?TypeError, __init__() missing 1 required positional argument: 'get_response' 在 python 中是什么意思?
【发布时间】:2020-09-27 23:33:59
【问题描述】:

我正在关注https://www.howtographql.com/graphql-python/4-authentication/ 的 graphql python 教程。前 3 个部分运行良好,但在身份验证部分我遇到了这个问题。

我正在学习python,不知道Django或graphql,所以一次消化了很多,但到现在为止还可以。也不确定要在此处包含哪些相关位。

我遵循了所有的指示。当我在localhost:8000/graphql/ 访问我的本地项目站点时,我得到了

TypeError at /graphql/
__init__() missing 1 required positional argument: 'get_response'

这是我的settings.py的相关sn-p:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
]

GRAPHENE = {
    'SCHEMA': 'hackernews.schema.schema',
    'MIDDLEWARE': ['graphql_jwt.middleware.JSONWebTokenMiddleware', ],
}

AUTHENTICATION_BACKENDS = [
    'graphql_jwt.backends.JSONWebTokenBackend',
    'django.contrib.auth.backends.ModelBackend',
]

我还在我的主 schema.py 中导入了 graphql_jwt

这是某种堆栈跟踪

Environment:


Request Method: GET
Request URL: http://localhost:8000/graphql/

Django Version: 2.1.4
Python Version: 3.7.4
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'graphene_django',
 'links']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware']



Traceback:

File "C:\Users\e79909\projects\python\graphql-python\venv\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)

File "C:\Users\e79909\projects\python\graphql-python\venv\lib\site-packages\django\core\handlers\base.py" in _get_response
  126.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\e79909\projects\python\graphql-python\venv\lib\site-packages\django\core\handlers\base.py" in _get_response
  124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\e79909\projects\python\graphql-python\venv\lib\site-packages\django\views\decorators\csrf.py" in wrapped_view
  54.         return view_func(*args, **kwargs)

File "C:\Users\e79909\projects\python\graphql-python\venv\lib\site-packages\django\views\generic\base.py" in view
  62.             self = cls(**initkwargs)

File "C:\Users\e79909\projects\python\graphql-python\venv\lib\site-packages\graphene_django\views.py" in __init__
  88.             self.middleware = list(instantiate_middleware(middleware))

File "C:\Users\e79909\projects\python\graphql-python\venv\lib\site-packages\graphene_django\views.py" in instantiate_middleware
  48.             yield middleware()

Exception Type: TypeError at /graphql/
Exception Value: __init__() missing 1 required positional argument: 'get_response'

【问题讨论】:

  • 我也有同样的问题。失眠甚至不是我的问题的一部分。根据教程更新设置后,我就无法再打开 GraphiQL 界面了。

标签: python django graphql


【解决方案1】:

好的,我刚刚找到了。

GRAPHENE = {
    'SCHEMA': 'hackernews.schema.schema',
    'MIDDLEWARES': ['graphql_jwt.middleware.JSONWebTokenMiddleware'],
}

注意S。它必须是'MIDDLEWARES',而不是'MIDDLEWARE'

GitHub issue找到解决方案

另外,根据this comment 在同一问题上,您应该将'graphql_jwt.middleware.JSONWebTokenMiddleware' 添加到MIDDLEWARE 列表(包含所有Django 中间件的列表)。

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'graphql_jwt.middleware.JSONWebTokenMiddleware', ### <---Add this line
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

【讨论】:

  • 我投了赞成票,因为这个答案最终解决了我的问题,但我不得不做出一些改变。这对我有用:在设置中的 GRAPHENE = {} 下使用“MIDDLEWARE”(没有 S)。当我将 graphql_jwt middlwares 添加到 GRAPHENE 和 MIDDLEWARE 时,我收到一条错误消息,提示要将 graphql_jwt 中间件添加到 GRAPHENE['MIDDLEWARE'] 并将其从 Django 中间件类中删除。
猜你喜欢
  • 1970-01-01
  • 2018-05-19
  • 2022-01-06
  • 2016-05-09
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多