You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已安装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)
  • 重新安装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的功能:

  1. 安装依赖:
    pip install djangorestframework-simplejwt
    
  2. 在settings.py中添加配置:
    INSTALLED_APPS = [
        # 原有app
        'rest_framework',
        'rest_framework_simplejwt',
    ]
    
  3. 修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:50:35