Comment importer à partir du fichier de configuration dans Flask?

J'ai suivi la mise en page de mon projet Flask à partir de http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world .

J'ai la structure suivante:

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

Dans views.py, forms.py je suis capable d'utiliser

from config import basedir

Cependant, je ne peux pas utiliser cela dans myFile.py

, j'ai ajouté

import Flask 

Et quand je le modifie, le serveur web Flask redémarre, mais il ne dit pas les changements trouvés dans app/myFile.py redémarrer juste redémarrer.

Que dois-je faire pour pouvoir utiliser

from config import basedir

Dans mon fichier python. Je ne vois rien de spécial en cours dans __init__.py pour forms.py.

EDIT: C'est mon fichier __init__.py:

from flask import Flask
from config import basedir

app = Flask(__name__)
app.config.from_object('config')
from app import views
25
demandé sur Zev Averbach 2013-02-28 01:00:25

2 réponses

Lorsque les gens parlent de configs dans Flask, ils parlent généralement de charger des valeurs dans la configuration de l'application. Dans votre exemple ci-dessus, vous pourriez avoir quelque chose comme app.config.from_object('config') votre init.py fichier. Ensuite, toutes les valeurs de configuration seront chargées dans le dictionnaire app.config.

Puis dans l'une de vos fichiers, vous pouvez simplement importer l'objet application pour accéder à ce dictionnaire. J'ai tendance à l'accès app objet en faisant from flask import current_app as app, puis juste app.config['MY_SETTING'] pour obtenir la valeur qui m'intéresse. lisez plus dans la documentation .

41
répondu Doobeh 2014-06-02 13:27:49

Après un peu de Tripotage (et un peu d'aide du ' net), je pourrais améliorer cela encore, en changeant le code pour inclure la configuration à:

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

Cela permet Ce modèle cool pour les configurations:

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

Ce qui reste maintenant, c'est de voir comment intégrer les configs de test dans cela, mais au moins c'est moins maladroit.

12
répondu mrArias 2016-10-14 12:53:14