Как сохранить настройки приложения Django в базе данных или изменить их на лету?

Есть ли у кого-нибудь предложения о том, как создать систему, которая позволит мне изменять настройки на лету? Например, у меня есть текстовая область, которую могут заполнять пользователи, и прямо сейчас она имеет максимальное ограничение в 1000 символов. Когда-нибудь я, возможно, захочу изменить его на 500, 2000 или что-то еще. Поэтому я не хочу ставить ограничение на саму модель, чтобы не хотеть пройти через кошмар с резервным копированием БД, запуском syncdb, повторным импортом БД, такой кошмар только для того, чтобы изменить простое значение. Я бы предпочел проверить длину символа с помощью Javascript или кода views.py.

if (length > value_stored_somewhere)
 throw error message

Я думал, что могу просто поместить эти значения в settings.py или, возможно, в отдельный файл local-settings.py, но это означает, что если я захочу изменить значение, мне придется перезапустить приложение, верно? Или я могу ошибаться, поэтому, пожалуйста, скажите мне, если я ошибаюсь.

Я подумал, что идеальным способом сделать это было бы поместить настройки в базу данных, чтобы администраторы могли изменять значения на лету, не касаясь файлов .py. Я взглянул на django-dbsettings, но, похоже, там вообще нет никакой активности.

Пожалуйста, дайте мне предложения и решения. Большое спасибо!


person rabbid    schedule 25.04.2011    source источник


Ответы (1)


Вы правы со всеми своими предположениями. Вам необходимо перезапустить приложение, если вы хотите изменить настройки (в любом файле настроек). Сейчас нет возможности «изменить настройки на лету». Существует множество многоразовых приложений, которые не обрабатываются, так называемые Live Settings. Может быть, вы попробуете один из них. Имейте в виду, что даже если вы измените настройки на лету, вы не измените поведение в Django (поскольку Django или другие приложения напрямую используют внутренние настройки). Однако для пользовательского приложения или проекта это хороший подход.

person Torsten Engelbrecht    schedule 25.04.2011
comment
Ой... Это страшный ответ. Так что же делают профессионалы Django в этой ситуации? Как они относятся к изменению настроек? Кроме того, в рабочей среде с использованием Apache, как мне перезапустить приложение Django? Спасибо! - person rabbid; 25.04.2011
comment
Да, обработка настроек в django не оптимальна и уже довольно часто подвергается критике. Для небольших проектов внесение изменений в файлы и их развертывание — это нормально, для более крупных проектов я бы с самого начала рассмотрел приложение для живых настроек (хотя в своей компании я написал собственное приложение, поскольку ни одно из вышеперечисленных не подходит для наших нужд). - person Torsten Engelbrecht; 25.04.2011
comment
И по поводу вашего вопроса: если вы развернете проект django с apache и mod_wsgi, вы можете просто сделать touch apache.wsgi (при условии, что ваш скрипт wsgi для вашего проекта apache.wsgi). Это заставит базовый процесс Apache использовать новый код. - person Torsten Engelbrecht; 25.04.2011
comment
Хорошо, тогда я добавлю некоторые настройки в settings.py или local-settings.py. Спасибо! - person rabbid; 25.04.2011