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 动态设置基础设施和最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

AWS 架构最佳实践概述

Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)

MVC 和 django 基础知识

夯实Mysql基础MySQL性能优化的21个最佳实践 和 mysql使用索引

建立和管理开源项目的最佳实践

Django基础,Day10 - template 模板引擎与路径设置