如何在 Django 项目中正确加载并实时生效 .env 环境变量

本文详解 Django 项目中通过 django-environ 加载 .env 文件的完整流程,涵盖环境配置、变量读取、服务重启要点及常见失效原因,确保修改后立即生效。

本文详解 Django 项目中通过 django-environ 加载 .env 文件的完整流程,涵盖环境配置、变量读取、服务重启要点及常见失效原因,确保修改后立即生效。

Django 本身不原生支持 .env 文件,因此仅将变量写入 .env 并重启开发服务器(如 python manage.py runserver)是无效的——Django 不会自动读取或解析该文件。要使 .env 中的变量真正生效,必须借助第三方库(如 django-environ)显式加载,并确保加载时机正确、路径准确、值被合理引用。

✅ 正确配置步骤

  1. 安装依赖

    pip install django-environ
  2. 在 settings.py 中初始化环境读取
    在 BASE_DIR 定义之后、任何使用环境变量之前(推荐紧接其后),添加以下代码:

    import os
    import environ
    
    # 初始化 environ 实例
    env = environ.Env()
    # 从项目根目录下的 .env 文件读取变量(注意:路径需准确)
    environ.Env.read_env(os.path.join(BASE_DIR, '.env'))

    ⚠️ 注意:os.path.join(BASE_DIR, '.env') 是标准做法;若 .env 位于其他位置(如与 manage.py 同级),请相应调整路径,例如 os.path.join(BASE_DIR, '..', '.env'),并确保路径存在且可读。

  3. 安全读取变量并设置默认值
    使用 env('KEY', default='fallback') 或 os.environ.get() 均可,但推荐 env() ——它支持类型转换(如 env.bool('DEBUG', default=False))和更清晰的错误提示:

    DEBUG = env.bool('DEBUG', default=False)
    SECRET_KEY = env('SECRET_KEY', default='insecure-key-for-dev')
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': env('DB_NAME'),
            'USER': env('DB_USER'),
            'PASSWORD': env('DB_PASSWORD'),
            'HOST': env('DB_HOST', default='localhost'),
            'PORT': env.int('DB_PORT', default=5432),
        }
    }

? 为什么重启后仍不生效?关键排查点

✅ 验证是否加载成功(调试建议)

在 settings.py 底部临时添加:

print("✅ Loaded DB_NAME:", env('DB_NAME', default='[NOT SET]'))
print("✅ DEBUG is:", DEBUG)

启动服务时观察终端输出,确认值符合预期。

? 最佳实践总结

完成上述配置后,每次修改 .env 文件,只需彻底重启 Django 开发服务器,新值即可即时生效——无需额外缓存清理或复杂钩子。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。