LINUX.ORG.RU

Flask, настройки

 , ,


0

1

Не совсем веб, скорее python. Есть проект на Flask, файл настроек config.py со всякими там DEBUG = True. Это штатный способ хранения настроек.

А как лучше всего их изменять? При первом запуске сайта его нужно настроить и сохранить изменения (инициализировать DB итд). Самый простой способ - смотреть, лежит ли в корне пустой файл firstrun и после настройки стирать его. Но это не по фен-шую, диском шуршать. Еще есть configparser, но он для конфигов совсем другого формата, придется кое-что переписать. Поэтому вопрос, чем быстро и просто менять настройки в py-файлах? Парсить регулярками лень, вдруг есть какая-то библиотека на этот случай.


Создать несколько python файлов с отдельными настройками для каждой ситуации. Отдельно для разработки, тестинга и продакшена. Запускать их в зависимости от ситуации.

menangen ★★★★★
()
Ответ на: комментарий от menangen

Не покатит. Мне нужен конфиг для продакшена с опцией FIRST_RUN = True, которая после настройки в веб-интерфейсе должна сменится на False.

Gregon
() автор топика
Ответ на: комментарий от Gregon

Вообще конфиг который app.config лучше держать неизменяемым, а изменяемые настройки хранить в БД. Но загружать конфиг из .ini, если очень хочется, тоже нормально.

ei-grad ★★★★★
()
Ответ на: комментарий от Gregon

Мне нужен конфиг для продакшена с опцией FIRST_RUN = True,

держи конфиг в ini и изменяй. Да и звачем тебе это нужно? цмску чтоле пишешь?

ggrn ★★★★★
()
Ответ на: комментарий от bj

В таком виде оно будет при каждом вызове индекса теребить диск.

@app.route('/')
def show_index():
    if app.config['FIRST_RUN'] == True:
        return redirect('/setup')
    else:
        return render_template('index.html')
Gregon
() автор топика
Ответ на: комментарий от ei-grad

БД еще не существует при первом запуске) Но в принципе у меня появилась идея. Все не изменяемое хранится в app.config, а вот first run в ini и всё пучком. Спс.

Gregon
() автор топика
Ответ на: комментарий от ggrn

Почти. Сайт для конкусов рассказов.

Gregon
() автор топика
Ответ на: комментарий от Gregon

Ну да, это в таком случае идеальный вариант наверно.

ei-grad ★★★★★
()
Ответ на: комментарий от Gregon

Не могу, даже мысленно не могу, такую замену делают только мартышки.

bj
()

Решил задачу еще более просто. В config.py дефолтно FIRST_RUN = True. А после генерации БД и применения первичных настроек вызывается такая функция:

def set_firstrun_false():
    for line in fileinput.input(['config.py'], inplace=True):
        line = line.replace('FIRST_RUN = True', 'FIRST_RUN = False')
        # sys.stdout is redirected to the file
        sys.stdout.write(line)

После чего Flask перезагружается (не забываем настройку use_reloader=True). Даже flash-сообщение после рестарта показывает.

Gregon
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.