Как импортировать из файла конфигурации в 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
Ответы
Ответ 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
Теперь осталось посмотреть, как интегрировать тестовые конфигурации в это, но по крайней мере это кажется менее неуклюжим.