如何在Python中为Django多环境配置分层settings模块

夏辰大大_5280

夏辰大大_5280

2026-09-29

657人浏览

原创

应采用 settings/ 目录结构分层配置:base.py 放公共逻辑,dev.py/prod.py 等继承并覆盖环境敏感项,SECRET_KEY 和数据库凭据须从环境变量读取,禁止硬编码或 fallback,默认值仅设在 base.py,ALLOWED_HOSTS、LOGGING、第三方服务配置须按环境显式设定。

如何在python中为django多环境配置分层settings模块

为什么不能只用一个 settings.py

单文件配置在项目小的时候没问题,但一旦要区分开发、测试、预发、生产环境,硬编码 DEBUG=True、写死数据库地址或密钥,很快就会出问题:比如不小心把本地调试用的 EMAIL_BACKEND = 'console' 提到生产,或者把 SECRET_KEY 提交进 Git。Django 本身不强制分层,但官方推荐按环境拆分——核心不是“能不能”,而是“不拆早晚踩坑”。

怎么组织 settings 目录结构才不反人类

常见错误是建一堆平行文件如 settings_dev.py、settings_prod.py,然后靠 DJANGO_SETTINGS_MODULE 切换。这会导致大量重复代码和维护断裂。更稳妥的做法是建 settings/ 包:

myproject/
├── settings/
│   ├── __init__.py
│   ├── base.py      # 公共配置(INSTALLED_APPS、MIDDLEWARE 等)
│   ├── dev.py       # 继承 base,覆盖 DEBUG、数据库、日志等
│   ├── prod.py      # 继承 base,禁用 DEBUG,配真实 DB 和缓存
│   └── test.py      # 可选,专为 pytest 配置 DATABASES['default']['NAME'] = ':memory:'

关键点:

  • base.py 不应包含任何环境敏感值(如 SECRET_KEY、DATABASE_URL),只放可复用逻辑
  • dev.py 和 prod.py 必须以 from .base import * 开头,再做覆盖,避免漏继承
  • 所有子配置里不要写 if DEBUG: 这类判断——环境差异靠文件分离,不是靠条件分支

如何让 manage.py 自动加载对应环境配置

Django 启动时读取 DJANGO_SETTINGS_MODULE,所以不能指望它自动猜。最轻量的做法是在 manage.py 里加环境判断:

import os
from pathlib import Path
<h1>…… 原有代码</h1><p>if <strong>name</strong> == '<strong>main</strong>':
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.dev')</p><h1>或根据环境变量切换:</h1><pre class="brush:python;toolbar:false;"># env = os.getenv('DJANGO_ENV', 'dev')
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', f'myproject.settings.{env}')

生产部署时,直接在启动命令里指定:

Python 环境工具专业版
Python 环境工具专业版

Python 环境工具专业版功能概述Python 环境工具专业版是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。核心要点使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。执行完成后建议检查结果是否符合预期,并保留必要记录。使用与执行同时注意输入完整性、执行条件和输出可用性。从功能定位来看,该技能

下载
gunicorn myproject.wsgi:application --env DJANGO_SETTINGS_MODULE=myproject.settings.prod

注意:prod.py 必须从环境变量读敏感配置,例如:

import os
SECRET_KEY = os.environ['SECRET_KEY']
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.environ['DB_NAME'],
        'USER': os.environ['DB_USER'],
        # ……
    }
}

别把密钥写死在代码里,也别用 os.getenv('KEY', 'fallback')——生产环境缺 KEY 就该立刻报错,而不是悄悄用默认值。

容易被忽略的三个细节

分层之后,以下三点最容易引发线上事故:

  • ALLOWED_HOSTS 在 prod.py 中必须显式列出域名,不能留空或写 ['*'](Django 会拒绝请求)
  • LOGGING 配置要随环境变化:开发用 ConsoleHandler,生产必须配 RotatingFileHandler 并确认目录有写权限
  • 第三方服务如 Sentry、Redis 缓存,在 base.py 里只设默认值(如 CACHES = {'default': {...}}),具体连接串全部移到 prod.py 或 dev.py 中覆盖

环境配置不是越细越好,关键是把“变”的部分抽出来,把“不变”的逻辑收拢。一旦开始用 settings/ 目录,就别再往 base.py 里塞任何带环境倾向的值——哪怕只是 EMAIL_BACKEND 的默认值,也该由子配置决定。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python django 环境配置

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1931

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

5464

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1889

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

33237

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3907

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3907

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1283

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

616

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

3043

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程