WebApp нужно сделать что-то только в первый раз, куда поместить эту логику? Настой или Джанго - PullRequest
1 голос
/ 23 декабря 2011

Веб-приложение, над которым я работаю, нуждается в первоначальной настройке или инициализации,

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

Я думал о том, чтобы проверить, есть ли нормальная конфигурация при запуске приложения, затем изменить маршрут по умолчанию / на страницу настроек / настроек и изменить его обратно. Но это немного похоже на самоизменяющийся код.

Это необходимо, поскольку веб-приложению нужны настройки, а затем индексировать содержимое на основе этих настроек, которые занимают немного времени. Поэтому после выполнения настроек мне все еще нужно подождать, пока индексация не будет завершена. Таким образом, даже после того, как были выполнены настройки / настройки, любые последующие запросы должны будут видеть сообщение «ожидание индексации».

Я использую колбу, но я думаю, что это актуально и для Джанго.

РЕДАКТИРОВАТЬ: Я думаю, как это сейчас;

При запуске проверьте appconfig.py на наличие MY_SETTINGS, если его там нет добавьте значение по умолчанию из config.py и поместите объект status = firstrun в app.config, а также измените / route для настройки функции просмотра. Функция просмотра настроек затем проверит объект app.config.status и выполнит Настройка параметров по мере необходимости после ввода пользователя, когда настройки в порядке,
удалите app.config.status или измените его на «indexing», тогда у меня может быть функция before_request для проверки app.config.status, чтобы просто прошить сообщение об этом. Или я мог бы использовать flask.g вместо app.config для хранения статуса?

1 Ответ

1 голос
/ 23 декабря 2011

Правильным способом является создание скрипта CLI, предпочтительно через Flask-Script, если вы используете Flask (в Django это будет значение по умолчанию manage.py, где вы также можете легко добавлять собственные команды) и определение такая функция, как init или install:

from flaskext.script import Manager
from ... import app
manager = Manager(app)
@manager.command
def init():
    """Initialize the application"""
    # your code here

Затем вы упоминаете об этом в своей документации и можете легко предположить, что он был запущен при обращении к самому веб-приложению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...