6

我正在尝试在 GCP 上部署 django 应用程序,但是当我尝试进行迁移时,它给了我这个错误:

ImportError:无法为 API 设置“DEFAULT_AUTHENTICATION_CLASSES”导入“rest_framework_simplejwt.authentication.JWTAuthentication”。ModuleNotFoundError:没有名为“rest_framework_simplejwt”的模块。

设置.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
 }

要求.txt

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

我错过了什么?

更新 我安装了rest_framework_simplejwt,现在错误转移到:

没有名为“rest_framework_simplejwt.tokens”的模块

4

7 回答 7

11

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

但是,您实际使用的 ,rest_framework_simplejwt.authentication.JWTAuthentication来自 pip 包djangorestframework-simplejwt

所以你需要更新你的 requirements.txt。删除djangorestframework-jwt和添加djangorestframework-simplejwt

于 2019-09-10T06:04:29.233 回答
3

对我来说,从当前最新版本djangorestframework-simplejwt升级解决了这个问题。4.4.04.6.0

pip3 install --upgrade djangorestframework-simplejwt
于 2021-05-18T11:10:51.313 回答
2

如果有人仍然遇到此错误,这是 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
于 2020-06-12T17:56:06.340 回答
0

我的问题还在于安装了 djangorestframework-jwt 和 djangorestframework_simplejwt。卸载前者后,我的问题得到了解决。

于 2022-01-18T01:01:26.230 回答
0

对我来说,通过重新启动虚拟环境来解决问题

于 2021-02-10T21:28:27.537 回答
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。相反,我不得不将 requirements.txt 编辑为 v4.4.0(pypi.org 上的当前版本),在解决此问题之前重做 git add/commit

于 2020-12-06T23:49:44.543 回答
-1

如果有人仍然在使用 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 ,在本例中为 version 3.9。我的设置为3.10之前,在撰写本文时,它不受支持。然后重新构建你的 docker 镜像。

docker-compose down

docker-compose up -d --build

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

于 2022-01-10T14:27:04.327 回答