【问题标题】:Django dynamic settings infrastructure and best practicesDjango 动态设置基础设施和最佳实践
【发布时间】:2011-01-07 17:41:43
【问题描述】:

Django 设置包括一个 python 变量列表,这些变量用于从数据库设置到已安装应用程序的大量事物。甚至许多可重复使用的应用程序都需要进行一些设置。

有几十个站点,很难管理所有项目的设置。

幸运的是,settings 只是一个带有变量的 python 模块,所以你可以做任何魔法来填充你想要的变量。

您遵循了哪些做法,或者您认为可用于将各种相关设置分成不同的文件?

显然,现有的 企业实践 是开发人员制造了一场战争,然后运维部门将其打给蓝鱼并负责所有数据库(和此类)运维工作(根据 @987654321 @)。

您可以创建哪些动态settings.py 来帮助现有的企业实践?

【问题讨论】:

标签: django settings django-settings


【解决方案1】:

我经常看到设置文件类似于:

from localsettings import *

localsettings.py 中定义了诸如数据库连接和DEBUG 值之类的东西。 localsettings.py 对于每个部署环境(开发/登台/生产等)来说(或可能)不同,并且不与其他所有环境一起存在于源代码控制中。

我最近发现有用的东西是把它放在我的settings.py

try:
    from localsettings import *
except ImportError:
    from default_localsettings import *

default_localsettings.py 中我定义了一堆默认值(DEBUG = True,使用与default_localsettings.py 相同目录中的 sqlite 数据库等)。

一旦你完成了设置,这可能没用,但我发现它很有用,只是能够检查我的项目脱离源代码控制并使用runserver 让它直接工作,而无需设置有什么事。

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      就个人而言,我喜欢用这样的设置制作一个模块

      project/
        settings/
          __init__.py
          settings.py
          local.py
      

      文件__init__.py 看起来像:

      from .settings import *
      from .local import *
      

      您已采用变量 BASE_DIR 指向更高一级的目录。

      使用此过程,您不必采用导入机制之类的任何其他方法。只需使用from django.conf import settings。 local.py 中的所有设置都会覆盖 settings.py 中的设置。

      但是,这种可能的解决方案可以与上面给出的其他答案结合使用。

      【讨论】:

        最近更新 更多