繁体   English   中英

避免 django 设置文件中的代码重复

[英]Avoiding code duplication in django settings files

我使用base.pylocal.pyprod.pystaging.py遵循 Django 设置最佳实践。

我的难题是是否可以接受代码重复。 让我们举这个例子。 我需要设置一个 URL,它用于大型固定值字典来配置 package。

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 ,但这不是一个好的本地开发体验。
  • 最后,我可以在localstaging,prod中复制PACKAGE_CONF

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

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

.env文件值仅在环境变量不存在时使用。 因此,您可以将.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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM