Django 配置分层与多环境管理:从 settings.py 到“可演进”的配置体系

一、目录结构建议 project/ settings/ init.py base.py dev.py test.py staging.py prod.py manage.py

base.py:通用配置(数据库、缓存、日志的默认项)。

其他文件只覆盖差异项,如 DEBUG、数据库地址、缓存后端、静态资源域名等。

二、环境变量与密钥

使用 os.environ.get 读取密钥与敏感项;在容器或 CI 中注入。

非敏感默认值放在 base.py,敏感内容必须来自环境变量,避免写进代码库。

示例(base.py):

import os from pathlib import Path

BASE_DIR = Path(file).resolve().parent.parent

SECRET_KEY = os.environ.get("DJ_SECRET_KEY", "dev-only-key") DEBUG = False

ALLOWED_HOSTS = os.environ.get("DJ_ALLOWED_HOSTS", "").split(",") if not DEBUG else ["*"]

DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql", "NAME": os.environ.get("DB_NAME", "app"), "USER": os.environ.get("DB_USER", "app"), "PASSWORD": os.environ.get("DB_PASSWORD", ""), "HOST": os.environ.get("DB_HOST", "127.0.0.1"), "PORT": os.environ.get("DB_PORT", "5432"), } }

三、按环境覆盖(prod.py) from .base import *

DEBUG = False SECURE_HSTS_SECONDS = 31536000 CSRF_COOKIE_SECURE = True SESSION_COOKIE_SECURE = True

四、运行方式

本地:DJANGO_SETTINGS_MODULE=project.settings.dev

生产:DJANGO_SETTINGS_MODULE=project.settings.prod

五、日志与可观测性

在 base.py 定义统一日志格式,生产仅把日志级别调高并接入收集系统。

推荐为数据库慢查询、缓存命中、外部 API 失败配置专门 Logger。

题外话:部分示例与经验来自团队内部的最佳实践,也参考了我日常记录在 gplpal 的笔记要点。

评论 0