无法为 API 设置 'DEFAULT_AUTHENTICATION_CLASSES' 导入 'rest_framework_jwt.authentication.JSONWebTokenAuthentication'

Could not import 'rest_framework_jwt.authentication.JSONWebTokenAuthentication' for API setting 'DEFAULT_AUTHENTICATION_CLASSES'

完整错误: 无法为 API 设置 'DEFAULT_AUTHENTICATION_CLASSES' 导入 'rest_framework_jwt.authentication.JSONWebTokenAuthentication'。导入错误:无法从 'django.utils.encoding'

导入名称 'smart_text'
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ),
}

这是虚拟环境中的 pip 冻结:

(backend) PS D:\js\backend> pip freeze                          
asgiref==3.5.1
Django==4.0.4
django-cors-headers==3.11.0
djangorestframework==3.13.1
djangorestframework-jwt==1.11.0
djangorestframework-simplejwt==5.1.0
mysqlclient==2.1.0
PyJWT==1.7.1
pytz==2022.1
sqlparse==0.4.2
tzdata==2022.1

在错误中间,它为装饰器解决了 views.py 中的一些行:

from http.client import HTTPResponse
from multiprocessing import context
from django.shortcuts import render
from django.http import HttpResponse, Http404, JsonResponse
from .models import Tweet
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import api_view, permission_classes
from rest_framework import status

我不确定他们是否相关

'rest_framework_jwt.authentication.JSONWebTokenAuthentication' 这是由 djangorestframework-jwt 提供的,不再维护。只需卸载它 而是使用 'rest_framework_simplejwt.authentication.JWTAuthentication' 来自 djangorestframework-simplejwt

你的'DEFAULT_AUTHENTICATION_CLASSES'应该是这样的:

'DEFAULT_AUTHENTICATION_CLASSES': (
    
    'rest_framework.authentication.SessionAuthentication',
    'rest_framework.authentication.BasicAuthentication',
    'rest_framework_simplejwt.authentication.JWTAuthentication', 
),