Изменение настроек Django во время выполнения

Я хотел бы предоставить некоторые (специфичные для приложения) настройки в интерфейсе администратора, чтобы пользователи могли удобно их изменять, а также не перезапускали Django.

Как мне поступить? это?

Я проверил приложения на http://djangopackages.com/grids/g/live-setting/ (кстати, django-constance был наиболее привлекательным), но на самом деле, что все эти приложения это хранение значений в базе данных, предоставление веб-интерфейса для их изменения и кэширование. Разве первые две функции уже не встроены в Django?

Самым большим недостатком, который я вижу, является то, что ни одно из приложений не является заменой старого местоположения этих настроек (settings.py) и требует от меня перехода на их нотацию и часто добавляют другой контекстный процессор для доступа к ним в шаблонах.

Могу я просто сделать это?

  1. Создать модель для моих настроек (это дает мне различные типы и проверки)
  2. Создать экземпляр такой объект для хранения моих настроек (это позволяет пользователям редактировать их в интерфейсе администратора) - я мог сбрасывать значения по умолчанию как фикстуры, как для других моделей
  3. Обернуть settings.py, чтобы он делал запрос к базе данных для моих настроек - http://www.loose-bits.com/2011/04/exnding-django-settings-with-dehibited.html

С моей нынешней наивной точки зрения единственными недостатками, которые я вижу, были бы:

  1. Добавление или изменение доступных настроек требует миграции схемы (юг). - Я могу с этим жить.
  2. У меня есть модель с несколькими экземплярами, но на самом деле нужен только синглтон. - В какой-то момент это может оказаться полезной функцией.
  3. Производительность / кэширование: глядя на http://code.djangoproject.com/svn/django/trunk/django/conf/ Я бы нужно добавить немного смекалки в оболочку настроек и / или модель, чтобы изменения модели очищали или обновляли кешированные значения. - не похоже на ракетостроение.
  4. Чтобы сделать то же самое в другом проекте, снова потребуются аналогичные усилия. - Я думаю, что единственная словарная константа в settings.py, содержащая имя (имена) модели и имена полей для поиска, - это все, что могло бы отличаться.

Разве это не было бы лучшим из обоих миров - администратор среды выполнения (со всеми его льготы), серверная часть базы данных, кеширование и никакие мои настройки. USED_TO_BE_IN_SETTINGS_DOT_PY потребует каких-либо изменений. Я что-то упустил?

47
задан Amir Ali Akbari 13 April 2016 в 14:18
поделиться