导入错误:无法导入'rest_framework_simplejwt.authentication.JWTAuthentication'。

12
我正在尝试在GCP上部署一个Django应用程序,但是当我尝试进行迁移时,它给了我这个错误:
导入错误:无法导入'rest_framework_simplejwt.authentication.JWTAuthentication'用于API设置'DEFAULT_AUTHENTICATION_CLASSES'。模块未找到错误:没有名为'rest_framework_simplejwt'的模块。

Settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated'
    ],
'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ]
}

SIMPLE_JWT = {
    'ALGORITHM': 'HS256',
    'SIGNING_KEY': SECRET_KEY,
    'VERIFYING_KEY': None,
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=800),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=2),
}
OAUTH2_PROVIDER = {
        'ACCESS_TOKEN_EXPIRE_SECONDS': 60 * 15,
        'OAUTH_SINGLE_ACCESS_TOKEN': True,
        'OAUTH_DELETE_EXPIRED': True
 }

requirements.txt

django-cors-headers
pyjwt
djangorestframework
djangorestframework-jwt==1.11.0

我错过了什么吗?
更新:我安装了rest_framework_simplejwt,现在出现了错误:
“没有名为'rest_framework_simplejwt.tokens'的模块”

你在GCP上进行哪种部署?计算引擎还是应用引擎? - Matthew Gaiser
应用引擎部署 - Rahul Sharma
我遇到这个错误是因为我安装了webauthndjango-webauth,可能更新了一些包,然后我卸载了它们,问题就解决了。 - Azhar Uddin Sheikh
9个回答

18

看起来您混淆了两个包。您在requirements.txt中使用的djangorestframework-jwt已经不再维护。它提供了rest_framework_jwt.authentication.JSONWebTokenAuthentication身份验证类。

然而,您实际使用的是来自pip包djangorestframework-simplejwtrest_framework_simplejwt.authentication.JWTAuthentication

因此,您需要更新您的requirements.txt文件。删除djangorestframework-jwt并添加djangorestframework-simplejwt


6
嘿,我按照你的方法尝试了,但仍然出现了相同的错误。 - Syafiqur__

6

对于我来说,将djangorestframework-simplejwt4.4.0升级到当前最新版本4.6.0解决了问题。

pip3 install --upgrade djangorestframework-simplejwt

5

如果任何人仍然遇到此错误,这是djangorestframework-simplejwt的要求:

Python (3.6, 3.7, 3.8)
Django (2.0, 2.1, 2.2, 3.0)
Django REST Framework (3.8, 3.9, 3.10)

我将Django和DRF降级,这个问题就解决了。

pip uninstall django
pip uninstall djangorestframework
pip install --upgrade django==3.0
pip install --upgrade djangorestframework==3.10
pip install djangorestframework-simplejwt

1
对我而言,通过重新启动虚拟环境解决了问题。

0

清空虚拟环境并创建一个新的,安装支持的版本的drf解决了我的问题


0
我的问题是安装了djangorestframework-jwt和djangorestframework_simplejwt两个包。卸载前者后,我的问题解决了。

0

我在尝试在Heroku上部署时遇到了相同的错误。

调查后,我发现我的情况有两个问题:

1] requirements.txt --> 这个文件没有更新,因此“git add”和“git commit”没有捕获djangorestframework-simplejwt的新需求

因此,解决方案是执行 pip freeze > requirements.txt 命令,进行 git add/commit 操作,并在 Heroku 上确认。

2] 其次,我发现 Heroku 找不到 python3.8 安装的 v4.6.0, 而是找到了 PyPI.org 上当前版本的 v4.4.0。在解决这个问题之前,我必须编辑 requirements.txt 到 v4.4.0 版本并重新执行 git add/commit 的操作。


0

你需要重新启动你的机器并安装

  • pip install djangorestframework-jwt
  • pip install djangorestframework-simplejwt

请确保这些库已经安装。


0

如果有人在使用VS Code并在Docker容器中运行他们的Django应用程序时仍然遇到此问题,我通过将我的Python版本降级到3.9而不是3.10,并重新构建我的容器来解决了此问题。

在您的Dockerfile中确保FROM python:3.9与文档页面上当前支持的Python版本匹配: https://django-rest-framework-simplejwt.readthedocs.io/en/latest/index.html ,在这种情况下为版本3.9。我的设置为3.10,但在撰写本文时不受支持。然后重新构建您的Docker映像。

docker-compose down

docker-compose up -d --build

此外,如果您正在使用pipenv管理软件包,请在您的Pipfile中更改您的Python版本python_version = "3.9"。然后运行pipenv install以安装更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接