You need to enable JavaScript to run this app. 如何正确管理Django生产与开发环境文件及敏感配置信息
优惠活动
大模型
产品
解决方案
定价
更多

如何正确管理Django生产与开发环境文件及敏感配置信息

Django多环境配置与敏感信息管理方案

1. 多环境配置的源码管控方案

你可以通过拆分配置文件+环境变量切换的方式实现一套代码适配多环境,所有配置文件都可以正常提交到GitHub私有仓库,无需手动修改配置即可切换环境:

  • 将原有的单settings.py文件拆分为配置包,通用配置(比如应用列表、中间件、全局时区等)存入base.py,开发环境专属配置(比如开启DEBUG、本地数据库地址、开发调试工具配置等)存入dev.py,生产环境专属配置(比如关闭DEBUG、生产域名白名单、生产数据库配置占位、日志级别等)存入prod.py
  • 在配置包的__init__.py中编写动态加载逻辑,读取系统环境变量中的DJANGO_ENV值,自动加载对应环境的配置,默认值设为dev,方便本地开发直接使用
  • 依赖文件也做拆分:通用生产依赖存入requirements.txt,开发环境专属依赖(比如debug-toolbar、测试框架等)存入requirements-dev.txt,不同环境安装对应依赖即可
  • 任意设备拉取代码后,只需要设置对应的DJANGO_ENV环境变量值,就能直接加载对应配置启动服务,不需要修改任何仓库中的代码文件

2. 敏感信息管理方案

任何明文的敏感信息(包括SECRET_KEY、数据库密码、第三方服务密钥等)都禁止提交到代码仓库,哪怕是私有仓库也不例外,推荐按以下方式管理:

  • 所有敏感配置不要硬编码到配置文件中,统一用os.getenv()从系统环境变量读取,开发环境可以设置默认的测试值方便调试,生产环境强制要求从环境变量传入真实值
  • 本地开发时可以用.env文件存储所有本地敏感配置,将.env加入.gitignore,确保不会被提交到仓库
  • 仓库中提交.env.example模板文件,罗列所有需要配置的环境变量名称和说明,不填真实值,其他开发者拉取代码后直接复制该文件为.env,填入自己的本地配置值即可使用
  • 生产环境的敏感信息直接在服务器层面设置系统环境变量,或者存放到服务器本地仅对应服务进程有读取权限的.env文件,不要上传到代码仓库

3. 理想的项目文件结构

<your_project_root>
├── <your_django_project_name>/  # Django项目核心包
│   ├── __init__.py
│   ├── settings/                # 拆分后的配置包
│   │   ├── __init__.py          # 动态加载配置的逻辑
│   │   ├── base.py              # 通用基础配置
│   │   ├── dev.py               # 开发环境专属配置
│   │   └── prod.py              # 生产环境专属配置
│   ├── urls.py
│   ├── asgi.py
│   └── wsgi.py
├── .env.example                 # 环境变量模板,提交到仓库
├── .gitignore                   # 配置忽略规则,排除.env、本地缓存、日志等文件
├── requirements.txt             # 生产环境通用依赖
├── requirements-dev.txt         # 开发环境专属依赖
├── manage.py
└── <your_apps>/                 # 你编写的各个Django应用目录

配置包__init__.py示例代码:

import os

env = os.getenv("DJANGO_ENV", "dev")
if env == "prod":
    from .prod import *
else:
    from .dev import *

配置文件读取敏感值示例:

import os
SECRET_KEY = os.getenv("DJANGO_SECRET_KEY", "dev_test_fake_key_123456")
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": os.getenv("MYSQL_DBNAME", "dev_db"),
        "USER": os.getenv("MYSQL_USER", "root"),
        "PASSWORD": os.getenv("MYSQL_PASSWORD", "dev_password"),
        "HOST": os.getenv("MYSQL_HOST", "127.0.0.1"),
        "PORT": os.getenv("MYSQL_PORT", "3306"),
    }
}

内容的提问来源于stack exchange,提问作者user16241015

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 02:36:03