避免在Django设置文件中重复代码

我正在使用base.pylocal.pyprod.pystaging.py来遵循Django设置最佳做法。

我的难题是代码​​复制是否还可以。让我们来看这个例子。我需要设置一个在固定值的大型词典中使用的URL,以配置程序包。

local.py CONF_URL = 'hard coded local value'

prod.py CONF_URL = os.environ['CONF_URL']

staging.py CONF_URL = 'some other hard coded value'

然后我有类似的代码

PACKAGE_CONF = {
  'CONF_URL': CONF_URL,'foo1': bar,'foo2': bar,'foo3': bar,'foo4': bar,'foo5': bar,}
  • 我无法将PACKAGE_CONF放在base.py中,因为我们是从叶子设置文件导入base的,而不是相反的。
  • 我可以写一些东西来发布流程PACKAGE_CONF,就像使用env文件一样,但这看起来不必要地复杂。
  • 我可以强迫用户从环境中夺取CONF_URL,但这并不是良好的本地开发经验。
  • 最后,我可以在PACKAGE_CONFlocalstaging,中复制prod

我对这些选项都不满意。有写精美设置文件经验的人可以提供更好的解决方案吗?

xiangzhou1990 回答:避免在Django设置文件中重复代码

您可以使用 .env 文件设置本地/开发环境的变量,并确保在暂存/产品环境中设置了相同的变量。

.env 文件值仅在不存在环境var时使用。因此,您可以将 .env 文件推送到您的代码存储库中。

这样,您将只能在 base.py 文件中写入一次var。

,

我最终要做的解决方案是

在我放置的base.py

PACKAGE_CONF = {
  'foo1': bar,'foo2': bar,'foo3': bar,'foo4': bar,'foo5': bar,}

然后我在叶子设置文件中覆盖PACKAGE_CONF['CONF_URL'],例如在staging.py

CONF_URL = 'some other hard coded value'
PACKAGE_CONF['CONF_URL'] = CONF_URL

缺点是,当创建新的叶子设置文件时,您可能会忘记添加此值,并且由于字典存在但缺少一个键,这可能导致意外行为。

但是,我认为这是可以接受的,因为当您创建新的叶子设置时,通常会复制粘贴现有的叶子设置。

本文链接:https://www.f2er.com/3106110.html

大家都在问