如果应用程序中没有在settings.py
中定义默认设置,那么djangonautic处理默认设置的方式是什么?
我目前已经在应用程序中放置了一个default_settings
文件,我已经考虑了几个选项.我倾向于第一种 Select ,但是使用globals()
可能会有一些我没有意识到的trap
我经常看到应用程序在使用该设置的文件顶部使用FOO = getattr(settings, 'FOO', False)
,但我认为如果值/名称太长,这种方法会出现可读性/重复性问题.
1: Place settings in a function and iterate over locals / set globals个
def setup_defaults():
FOO = 'bar'
for key, value in locals().items():
globals()[key] = getattr(settings, key, value)
setup_defaults()
赞成的意见:
- 只需写一次var名称,即可从Django设置中拉出同名的默认值.
缺点:
- 不习惯使用GLOBAL(),也不知道有什么含义
2: Write 100 every call
赞成的意见: - Very clear.
缺点: - Repetitive
3: Always define settings as 100
赞成的意见: - Defaults are always overridden
缺点:
- 重复(必须定义两次变量——一次以字符串形式,一次以变量形式)
- 设置的可读性较差,因为它现在是第三个参数
4: Create utility function to 100
赞成的意见:
- 易于理解的
- 无需重复设置的字符串表示形式
缺点:
- 不得不说
5: Create a settings class
class Settings(object):
FOO = 'bar'
def __init__(self):
# filter out the startswith('__') of
# self.__dict__.items() / compare to django.conf.settings?
my_settings = Settings()
缺点:
- 不能从foo.bar.my_settings导入foo(实际上,这是一个可怕的交易 destruct 者!)
我很想听听反馈意见.