已安装PyJwt但Django的views.py中import jwt报错:找不到模块
Django中使用PyJwt导入失败的解决方法
核心结论
Django完全支持使用jwt模块,你遇到的导入错误是环境配置不匹配或命名冲突导致的,并非框架本身的限制。
具体解决步骤
确认虚拟环境与Django运行环境一致
运行Django服务前,必须确保激活了安装PyJwt的虚拟环境:- Linux/Mac终端:
source venv/bin/activate - Windows终端:
venv\Scripts\activate
若用IDE开发(如PyCharm),需检查项目Python解释器是否指向虚拟环境内的Python路径(路径设置:File > Settings > Project: xxx > Python Interpreter)
- Linux/Mac终端:
重新安装PyJwt到目标虚拟环境
激活虚拟环境后,执行以下命令确保安装路径正确:pip uninstall pyjwt -y pip install pyjwt安装完成后用
pip list查看,确认PyJwt出现在依赖列表中排查命名冲突问题
检查项目根目录或views.py所在目录下,是否存在名为jwt.py的自定义文件。这类文件会覆盖第三方模块的导入路径,导致找不到正确的PyJwt模块,需将其重命名(例如改为custom_jwt_utils.py)
替代方案:使用Django专属JWT库
如果不想折腾环境问题,推荐使用更贴合Django生态的djangorestframework-simplejwt,它封装了token生成、验证、刷新等适配Django的功能:
- 安装依赖:
pip install djangorestframework-simplejwt - 在
settings.py中添加配置:INSTALLED_APPS = [ # 原有app 'rest_framework', 'rest_framework_simplejwt', ] - 修改views.py中的token生成代码:
from datetime import timedelta from rest_framework_simplejwt.tokens import AccessToken def generateJWT(portal): token = AccessToken() # 自定义payload字段 token['iat'] = token.current_time token['iss'] = 'localhost' token['portal'] = portal # 设置5年过期时间 token.set_exp(lifetime=timedelta(days=5*365)) return str(token)
内容的提问来源于stack exchange,提问作者madhu mitha
相关产品推荐
相关产品推荐

