2013-02-27 24 views
19

Mam śledzony układ mojego projektu Flask z http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world.Jak importować z pliku konfiguracyjnego w kolbie?

Mam następującą strukturę:

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

W views.py, forms.py jestem w stanie używać

from config import basedir 

Jednak nie mogę użyć tego w myFile.py

Dodałem

i kiedy go modyfikuję, serwer internetowy Flask uruchamia się ponownie, ale nie mówi, że znalezione zmiany w aplikacji/myFile.py ponownie go uruchomią.

Co muszę zrobić, aby móc korzystać z

from config import basedir 

w moim pliku Pythona. Nie widzę nic specjalnego w __init__.py dla forms.py.

EDIT: To jest mój __init__.py file:

from flask import Flask 
from config import basedir 

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

Odpowiedz

30

Kiedy ludzie mówią o configs w kolbie, są one na ogół mówimy o wartościach załadowaniem do konfiguracji aplikacji. W powyższym przykładzie możesz mieć coś w rodzaju pliku app.config.from_object('config') w swoim pliku init.py. Następnie wszystkie wartości konfiguracyjne zostaną załadowane do słownika app.config.

Następnie w dowolnym z plików można po prostu zaimportować obiekt aplikacji, aby uzyskać dostęp do tego słownika. Mam tendencję do dostępu do tego obiektu app, wykonując from flask import current_app as app, a następnie app.config['MY_SETTING'], aby uzyskać wartość, na której mi zależy. Read up more in the documenation.

+0

Mam app.config.from_object ("config") w moim pliku __init__.py. Czy wiesz, dlaczego "from config import basedir" działa w views.py i forms.py? – Siecje

+1

Dzięki człowieku. W dokumencie. nie wyjaśniono, w jaki sposób uzyskać dostęp do ustawień konfiguracyjnych z innych plików. – Jabba

+0

maleńka literówka, która dezorientowała mnie na chwilę. app.config_from_object ('config') staje się app.config.from_object ('config') – ThinkBonobo

7

Po trochę błahy (i trochę pomocy od „net), mogę poprawić to dalej, przez zmianę kodu do włączenia config:

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

Umożliwia to fajny wzór dla konfiguracje:

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 

co pozostaje teraz to, aby zobaczyć, jak zintegrować testowania configs w to, ale przynajmniej czuje się mniej niezdarny.

Powiązane problemy