2013-02-27 7 views
19

Ich habe das Layout meines Flask-Projekts von http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world verfolgt.Wie importiert man aus der Konfigurationsdatei in Flask?

Ich habe die folgende Struktur:

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

In views.py, forms.py ich in der Lage bin

from config import basedir 

Allerdings kann ich nicht, dass

in myFile.py verwenden verwenden

Ich fügte hinzu:

und wenn ich es ändere, startet der Flask-Web-Server neu, aber es heißt nicht, dass Änderungen in app/myFile.py gefunden wurden, es wird nur neu gestartet.

Was muss ich tun, um in der Lage sein

from config import basedir 

in meine Python-Datei zu verwenden. Ich sehe nichts Besonderes in __init__.py für forms.py getan.

EDIT: Das ist mein __init__.py Datei:

from flask import Flask 
from config import basedir 

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

Antwort

30

Wenn Leute über configs in Flask reden, sie sind Konfiguration im Allgemeinen sprechen über Belastungswerte in der App. In Ihrem obigen Beispiel könnten Sie etwas wie app.config.from_object('config') in Ihrer init.py Datei haben. Dann werden alle Konfigurationswerte in das app.config Wörterbuch geladen.

Dann könnten Sie in jede Ihrer Dateien einfach das App-Objekt importieren, um Zugang zu diesem Wörterbuch zu erhalten. Ich neige dazu, auf das app Objekt zuzugreifen, indem ich from flask import current_app as app mache, dann nur app.config['MY_SETTING'], um den Wert zu erhalten, der mir wichtig ist. Read up more in the documenation.

+0

Ich habe app.config.from_object ('config') in meiner __init__.py Datei. Weißt du, warum "from config import basedir" in views.py und forms.py funktioniert? – Siecje

+1

Danke Mann. Im Dokument Es wurde nicht erklärt, wie man von anderen Dateien auf die Konfigurationseinstellungen zugreifen kann. – Jabba

+0

winzige Tippfehler, die mich für eine Sekunde verwirrt haben. app.config_from_object ('config') wird app.config.from_object ('config') – ThinkBonobo

7

Nach ein wenig das Hantieren (und ein wenig Hilfe aus dem ‚Netz), konnte ich diese weiter verbessern, indem Sie den Code Ändern der Config enthalten:

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

Dies ermöglicht dieses coole Muster für Konfigurationen:

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 

Was jetzt bleibt, ist zu sehen, wie Tests configs in diese zu integrieren, aber zumindest fühlt es sich weniger ungeschickt.

Verwandte Themen