Подтвердить что ты не робот

Как импортировать из файла конфигурации в Flask?

Я следил за компоновкой моего проекта Flask из http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world.

У меня есть следующая структура:

app/
    __init__.py
    views.py
    forms.py
    myFile.py
run.py
config.py

В views.py, forms.py я могу использовать

from config import basedir

Однако я не могу использовать это в myFile.py

Я добавил

import Flask 

и когда я его модифицирую, веб-сервер Flask перезапускается, но он не говорит, что найденные изменения в app/myFile.py перезапускаются только после перезагрузки.

Что мне нужно сделать, чтобы иметь возможность использовать

from config import basedir

в моем файле python. Я не вижу ничего особенного в __init__.py для forms.py.

EDIT: Это мой файл __init__.py:

from flask import Flask
from config import basedir

app = Flask(__name__)
app.config.from_object('config')
from app import views
4b9b3361

Ответ 1

Когда люди говорят о конфигах в Flask, они обычно говорят о загрузке значений в конфигурацию приложения. В приведенном выше примере вы можете иметь что-то вроде app.config.from_object('config') в вашем файле init.py. Затем все значения конфигурации будут загружены в словарь app.config.

Затем в любом из ваших файлов вы можете просто импортировать объект приложения, чтобы получить доступ к этому словарю. Я стараюсь получить доступ к этому объекту app, выполнив from flask import current_app as app, а затем просто app.config['MY_SETTING'], чтобы получить значение, которое меня волнует. Читайте больше в документации.

Ответ 2

После небольшого количества попыток (и небольшой помощи от сети) я мог бы улучшить это дальше, изменив код, включив конфигурацию в:

app.config.from_object('config.ProductionConfig')

Это позволяет использовать этот классный шаблон для конфигураций:

class Config(object):
    DEBUG = True
    DEVELOPMENT = True
    SECRET_KEY = 'do-i-really-need-this'
    FLASK_HTPASSWD_PATH = '/secret/.htpasswd'
    FLASK_SECRET = SECRET_KEY
    DB_HOST = 'database' # a docker link

class ProductionConfig(Config):
    DEVELOPMENT = False
    DEBUG = False
    DB_HOST = 'my.production.database' # not a docker link

Теперь осталось посмотреть, как интегрировать тестовые конфигурации в это, но по крайней мере это кажется менее неуклюжим.