【发布时间】:2012-01-15 17:54:03
【问题描述】:
如果settings.py 中未定义默认设置,那么在应用程序中处理默认设置的 djangonautic 方式是什么?
我目前在应用程序中放置了一个default_settings 文件,并且我考虑了一些选项。我倾向于第一个选项,但在使用globals() 时可能存在我不知道的陷阱
我经常看到应用程序在使用该设置的文件顶部执行FOO = getattr(settings, 'FOO', False),但我认为如果值/名称很长,这种方法存在可读性/重复问题。
1:将设置放在函数中并迭代局部变量/设置全局变量
def setup_defaults():
FOO = 'bar'
for key, value in locals().items():
globals()[key] = getattr(settings, key, value)
setup_defaults()
优点:
- 只需编写一次 var name 即可从 django 设置中提取同名的默认值。
缺点:
- 不习惯使用 globals() 也不知道有什么影响
2:每次通话都写getattr(settings, 'MY_SETTING', default_settings.MY_SETTING)
优点: - 很清楚。
缺点:- 重复
3:始终将设置定义为FOO = getattr(settings, 'FOO', '...setting here...')
优点: - 默认值总是被覆盖
缺点:
- 重复(必须定义 var 两次 - 一次以字符串形式,一次以 var 形式)
- 设置不那么可读,因为它现在是第三个参数
4:为get_or_default(setting)创建实用函数
优点:
- 简单
- 不必重复设置字符串表示
缺点:
- 必须调用它
5:创建设置类
class Settings(object):
FOO = 'bar'
def __init__(self):
# filter out the startswith('__') of
# self.__dict__.items() / compare to django.conf.settings?
my_settings = Settings()
缺点:
- 不能 from foo.bar.my_settings import FOO(实际上,这是一个糟糕的交易破坏者!)
我很想听听反馈。
【问题讨论】:
-
@DrTyrsa,哈哈,好点子!我想出了一个骗局。我们只是说它在视觉上与其他常量不一致..
-
这些在 Django 1.11 中似乎都不再适用了。
-
Djangonautic,+1
标签: python django configuration