导入错误:无法导入“rest_framework_simplejwt.authentication.JWTAuthentication”

Rah*_*rma 5 python django django-rest-framework

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

导入错误:无法为 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
 }
Run Code Online (Sandbox Code Playgroud)

要求.txt

django-cors-headers
pyjwt
djangorestframework
djangorestframework-jwt==1.11.0
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

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

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

Bar*_*y12 9

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

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

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

  • 嘿嘿,我按照你的方法试过了,还是出现同样的错误。 (6认同)

Ali*_*ref 6

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

pip3 install --upgrade djangorestframework-simplejwt
Run Code Online (Sandbox Code Playgroud)


小智 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)
Run Code Online (Sandbox Code Playgroud)

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

pip uninstall django
pip uninstall djangorestframework
pip install --upgrade django==3.0
pip install --upgrade djangorestframework==3.10
pip install djangorestframework-simplejwt
Run Code Online (Sandbox Code Playgroud)