Я хотел бы показать некоторые (специфичные для приложения) настройки для интерфейса администратора, чтобы пользователи могли легко их изменить, а также не перезапустить Django.
Как мне это сделать?
Я проверил приложения на http://djangopackages.com/grids/g/live-setting/ (btw django-constance был наиболее привлекательным), но действительно, что делают все эти приложения, сохранение значений в базе данных, предоставление веб-интерфейса для их изменения и кэширование. Не первые две функции, встроенные в Django?
Самые большие недостатки, которые я вижу, - это то, что ни одно из приложений не содержит замены для старого расположения этих параметров (settings.py) и требует, чтобы я перешел к их нотации, и часто добавляю другой контекстный процессор для доступа к ним в шаблонах.
Не могу ли я просто сделать это?
- Создайте модель для моих настроек (это дает мне различные типы и проверку)
- Создайте один из таких объектов для хранения моих настроек (это позволяет пользователям редактировать их в интерфейсе администратора). Я мог бы сбросить значения по умолчанию в качестве приспособлений, например, для других моделей.
- Wrap settings.py, поэтому он делает запрос базы данных для моих настроек - http://www.loose-bits.com/2011/04/extending-django-settings-with-derived.html
Из моей текущей наивной точки зрения единственными недостатками, которые я вижу, было бы следующее:
- Для добавления или изменения доступных параметров требуется миграция схемы (на юг). - Я могу жить с этим.
- У меня есть модель с возможно несколькими экземплярами, но на самом деле нужен только одноэлемент. - В какой-то момент это может быть полезной функцией.
- Производительность/кэширование: смотря на http://code.djangoproject.com/svn/django/trunk/django/conf/ Мне нужно было немного поумнеть в оболочке настроек и/или модели, так что модель меняет четкость или обновляет кешированные значения. - похоже, не ракетостроение.
- Выполнение этого же в другом проекте потребует повторения подобных усилий. - Я думаю, что единственная константа словаря в settings.py, содержащая имена (имена) модели и имена полей для поиска - это все, что будет отличаться.
Разве это не лучшее из обоих миров - администратор времени выполнения (со всеми его преимуществами), бэкэнд базы данных, кеширование и ни одна из моих настроек. USED_TO_BE_IN_SETTINGS_DOT_PY будет нуждаться в каких-либо изменениях. Я что-то пропустил?