Django: DjangoRestFramework 使用 simpleJWT登陆认证  ImportError: Could not import 'rest_framework_jwt.authentication.JSONWebTokenAuthentication' for API setting 'DEFAULT_AUTHENTICATION_CLASSES'. ImportError: cannot import name 'smart_text' from 'django.utils.encoding'Django: DjangoRestFramework 使用 simpleJWT登陆认证  ImportError: Could not import 'rest_framework_jwt.authentication.JSONWebTokenAuthentication' for API setting 'DEFAULT_AUTHENTICATION_CLASSES'. ImportError: cannot import name 'smart_text' from 'django.utils.encoding'Django: DjangoRestFramework 使用 simpleJWT登陆认证  ImportError: Could not import 'rest_framework_jwt.authentication.JSONWebTokenAuthentication' for API setting 'DEFAULT_AUTHENTICATION_CLASSES'. ImportError: cannot import name 'smart_text' from 'django.utils.encoding'Django: DjangoRestFramework 使用 simpleJWT登陆认证  ImportError: Could not import 'rest_framework_jwt.authentication.JSONWebTokenAuthentication' for API setting 'DEFAULT_AUTHENTICATION_CLASSES'. ImportError: cannot import name 'smart_text' from 'django.utils.encoding'
  • 首页
  • 博客
  • 文件
  • 书签
  • 分析
  • 登录
Search
Generic filters

Django: DjangoRestFramework 使用 simpleJWT登陆认证 ImportError: Could not import 'rest_framework_jwt.authentication.JSONWebTokenAuthentication' for API setting 'DEFAULT_AUTHENTICATION_CLASSES'. ImportError: cannot import name 'smart_text' from 'django.utils.encoding'

Published by admin at 2022年10月5日
Categories
  • Django
Tags

https://blog.csdn.net/u014783334/article/details/124831902

  • JSON Web Token不再维护,故不使用。
  • 官方建议的是使用simpleJWT认证
  • 并且最新版本的Django和DRF如果使用JSON Web Token,项目启动会报错
 ImportError: Could not import 'rest_framework_jwt.authentication.JSONWebTokenAuthentication' for API setting 'DEFAULT_AUTHENTICATION_CLASSES'. ImportError: cannot import name 'smart_text' from 'django.utils.encoding'

 

simpleJWT官方文档

simpleJWT简单使用的步骤:

1、安装

pip install djangorestframework-simplejwt

2、配置

# settings.py
INSTALLED_APPS = [
	...
    'rest_framework',               # add
    'rest_framework_simplejwt',     # add
]

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
}
SIMPLE_JWT = {
    # token有效时长(返回的 access 有效时长)
    'ACCESS_TOKEN_LIFETIME': datetime.timedelta(seconds=30),
    # token刷新的有效时间(返回的 refresh 有效时长)
    'REFRESH_TOKEN_LIFETIME': datetime.timedelta(seconds=20),
}

3、配置路由

# urls.py
urlpatterns = [
    # 登录
    path('login/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('refresh/', TokenRefreshView.as_view(), name='token_refresh'),
    path('verify/', TokenVerifyView.as_view(), name='token_verify'),
]

4、验证

登录接口

  • 登录接口,返回refresh和access值
  • refresh用来刷新获取新的Token值
  • access用来请求身份认证的Token
  • access的过期时间参照配置ACCESS_TOKEN_LIFETIME
  • refresh的过期时间参照配置REFRESH_TOKEN_LIFETIME
  • 当用refresh刷新后,access的过期时间等于【当前刷新的此刻时间+ACCESS_TOKEN_LIFETIME】

验证
刷新

5、认证

# urls.py
urlpatterns = [
    ...
    path('test/', views.TestView.as_view()),
]

 

# views.py
class TestView(APIView):

    # permission_classes = []
    def get(self, request):
        print(request.user)
        return Response('test')

 

在这里插入图片描述
需要在请求头加上Authorization,格式:Bearer [token值] 有空格
在这里插入图片描述

发表回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Categories

  • 猫
  • Python
  • MySQL
  • Django
  • Html/CSS
  • JavaScript
  • Vue
  • RegExp
  • php
  • Practice
  • Virtualization
  • Linux
  • Windows
  • Android
  • NAS
  • Software
  • Hardware
  • Network
  • Router
  • Office
  • WordPress
  • SEO
  • English
  • Games
  • Recipes
  • living
  • Memorandum
  • Essays
  • 未分类

归档

©2015-2022 Alaica Blog support@alaica.com