解决使用djangorestframework-jwt时的ugettext导入错误
解决Django REST Framework JWT导入ugettext错误的方案
这个错误的核心原因是**djangorestframework-jwt已停止维护**,它依赖的ugettext函数在Django 4.0及以上版本中被移除(替换为gettext),导致兼容性问题。以下是几种可行的解决办法:
方案1:降级Django到3.x版本(临时应急)
如果项目对Django版本没有强制要求,可以降级到支持ugettext的版本:
pip install django<4.0
降级后重新运行项目即可恢复正常。
方案2:替换为维护中的JWT库(推荐)
官方推荐使用djangorestframework-simplejwt替代已废弃的djangorestframework-jwt,步骤如下:
- 卸载旧库:
pip uninstall djangorestframework-jwt
- 安装新库:
pip install djangorestframework-simplejwt
- 修改导入和路由配置:
原导入代码:
替换为:from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token, verify_jwt_token
路由配置修改为:from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView, TokenVerifyViewurlpatterns = [ # 获取Token(替代obtain_jwt_token) path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), # 刷新Token(替代refresh_jwt_token) path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), # 验证Token(替代verify_jwt_token) path('api/token/verify/', TokenVerifyView.as_view(), name='token_verify'), ] - 可选:在
settings.py中添加JWT配置(自定义过期时间等):REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_simplejwt.authentication.JWTAuthentication', ), } from datetime import timedelta SIMPLE_JWT = { 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5), 'REFRESH_TOKEN_LIFETIME': timedelta(days=1), }
方案3:手动修改旧库源码(不推荐)
如果必须使用djangorestframework-jwt,可以手动修改其源码适配高版本Django:
- 找到Python环境中
rest_framework_jwt的安装目录(通常在site-packages下) - 打开所有用到
ugettext的文件,将from django.utils.translation import ugettext替换为from django.utils.translation import gettext as ugettext
注意:此方法仅临时生效,后续更新库会覆盖修改,不建议长期使用。
另外注意:你最初的安装命令有误,正确的djangorestframework-jwt安装命令应为pip install djangorestframework-jwt(中间是下划线,而非空格加-jwt),不过该库已废弃,优先推荐方案2。
内容的提问来源于stack exchange,提问作者KIRAN KUMAR N
相关产品推荐
相关产品推荐

