2013-02-27 17 views
19

我從http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world開始關注我的燒瓶項目的佈局。如何從Flask中的配置文件導入?

我有以下結構:

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 web服務器重新啓動,但它沒有說在app/myFile.py中發現的更改重新啓動它只是重新啓動。

什麼我需要做的是能夠在我的Python文件中使用

from config import basedir 

。對於forms.py,我沒有看到__init__.py中有什麼特別的功能。

編輯:這是我__init__.py文件:

from flask import Flask 
from config import basedir 

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

回答

30

當人們談論瓶CONFIGS,他們一般都在談論載荷值到應用程序的配置。在上面的示例中,您的init.py文件中可能包含app.config.from_object('config')之類的內容。然後將所有配置值加載到app.config字典中。

然後在任何文件中,您只需導入應用程序對象即可訪問該字典。我傾向於通過做from flask import current_app as app然後只是app.config['MY_SETTING']來獲得我關心的價值的app對象。 Read up more in the documenation

+0

我在我的__init__.py文件中有app.config.from_object('config')。你知道爲什麼「from config import basedir」在views.py和forms.py中起作用嗎? – Siecje 2013-02-28 16:46:23

+1

謝謝你。在文檔中。沒有解釋如何從其他文件訪問配置設置。 – Jabba 2013-11-01 20:39:57

+0

微妙的錯字,讓我困惑了一秒。 app.config_from_object('config')變成app.config.from_object('config') – ThinkBonobo 2014-06-02 01:41:07

7

後襬弄了一點點(從淨一點幫助),我會這樣進一步提高通過改變代碼,包括config來:

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 

現在剩下的是看看如何將測試配置集成到這個中,但至少感覺不那麼笨拙。