Какой djangonautic способ обработки настроек по умолчанию в приложении, если он не определен в settings.py
?
В настоящее время я разместил файл default_settings
в приложении, и я рассмотрел несколько вариантов. Я склоняюсь к первому варианту, но могут быть подводные камни, о которых я не знаю при использовании globals()
В основном я видел, что приложения используют FOO = getattr(settings, 'FOO', False)
в верхней части файла, который использует этот параметр, но я думаю, что есть проблемы чтения/повторения с этим подходом, если значения/имена длинны.
1: Поместите настройки в функцию и итерации по locals/set globals
def setup_defaults():
FOO = 'bar'
for key, value in locals().items():
globals()[key] = getattr(settings, key, value)
setup_defaults()
Плюсы:
- Нужно только написать имя var однажды, чтобы вытащить значение по умолчанию с тем же именем из настроек 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()
Минусы:
- Невозможно сделать из foo.bar.my_settings import FOO (на самом деле, это ужасный разбойник!)
Я хотел бы услышать отзывы.