J'ai suivi la mise en page de mon projet Flask 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 peux 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 que les changements trouvés dans app/myFile.py le redémarrent ne font que 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: Ceci est mon __init__.py
fichier:
from flask import Flask
from config import basedir
app = Flask(__name__)
app.config.from_object('config')
from app import views
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')
dans votre init.py
fichier. Ensuite, toutes les valeurs de configuration seront chargées dans le app.config
dictionnaire.
Ensuite, dans n'importe lequel de vos fichiers, vous pouvez simplement importer l'objet d'application pour accéder à ce dictionnaire. J'ai tendance à accéder à cet objet app
en faisant from flask import current_app as app
puis juste app.config['MY_SETTING']
pour obtenir la valeur qui me tient à cœur. En savoir plus dans la documentation .
Après un peu de tripotage (et un peu d'aide du 'net'), je pourrais encore améliorer cela, 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 est de voir comment intégrer les tests de configuration à cela, mais au moins, cela semble moins maladroit.