Django 动态设置基础设施和最佳实践
Posted
技术标签:
【中文标题】Django 动态设置基础设施和最佳实践【英文标题】:Django dynamic settings infrastructure and best practices 【发布时间】:2011-01-07 17:41:43 【问题描述】:Django 设置包括一个 python 变量列表,这些变量用于从数据库设置到已安装应用程序的大量事物。甚至许多可重复使用的应用程序都需要进行一些设置。
有几十个站点,很难管理所有项目的设置。
幸运的是,settings 只是一个带有变量的 python 模块,所以你可以做任何魔法来填充你想要的变量。
您遵循了哪些做法,或者您认为可用于将各种相关设置分成不同的文件?
显然,现有的 企业实践 是开发人员制造了一场战争,然后运维部门将其打给蓝鱼并负责所有数据库(和此类)运维工作(根据 @987654321 @)。
您可以创建哪些动态settings.py
来帮助现有的企业实践?
【问题讨论】:
code.djangoproject.com/wiki/… 【参考方案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】:按照此设置覆盖示例来处理开发、登台和生产环境。
http://djangodose.com/articles/2009/09/handling-development-staging-and-production-enviro/
(archived version at Wayback Machine)
【讨论】:
【参考方案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 中的设置。
但是,这种可能的解决方案可以与上面给出的其他答案结合使用。
【讨论】:
以上是关于Django 动态设置基础设施和最佳实践的主要内容,如果未能解决你的问题,请参考以下文章
Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)