如何从Flask中的配置文件导入?

时间:2013-02-27 21:00:25

标签: python python-2.7 flask

我已经从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中发现的更改重新启动它只是重新启动。

我需要做什么才能使用

from config import basedir

在我的python文件中。我没有在__init__.py中看到form.py。

的任何特殊内容

编辑:这是我的__init__.py文件:

from flask import Flask
from config import basedir

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

3 个答案:

答案 0 :(得分:50)

当人们谈论Flask中的配置时,他们通常都在谈论将值加载到应用程序的配置中。在上面的示例中,您的app.config.from_object('config')文件中可能包含init.py。然后,所有配置值都将加载到app.config字典中。

然后,在您的任何文件中,您只需导入应用程序对象即可访问该词典。我倾向于通过app访问from flask import current_app as app对象,然后只需app.config['MY_SETTING']来获取我关心的值。 Read up more in the documenation

答案 1 :(得分:18)

经过一些小小的摆弄(以及来自网络的一点帮助),我可以通过更改代码以包含配置来进一步改进:

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

现在剩下的就是看看如何将测试配置集成到这里,但至少它感觉不那么笨拙。

答案 2 :(得分:0)

我在我的烧瓶项目-根文件夹中创建了一个config.json文件,如下所示:

  

config.json

{
    "mail_settings":{
        "MAIL_SERVER": "smtp.gmail.com",
        "MAIL_PORT": 465,
        "MAIL_USE_TLS": "False",
        "MAIL_USE_SSL": "True",
        "MAIL_USERNAME": "your_mail@gmail.com",
        "MAIL_PASSWORD": "your_password"
    },
    "database":{
        "MYSQL_HOST":"localhost",
        "MYSQL_USER": "user_name",
        "MYSQL_PASSWORD":"password",
        "MYSQL_DB":"database_name"
    }
}

,然后在要访问配置值的位置添加以下代码。例如,我将在如下的app.py中使用:

第一个导入烧瓶json库:

import json

第二次打开文件以将json读取并存储在如下所示的变量中:

with open('config.json') as config_file:
    config_data = json.load(config_file)

在创建名为应用程序app = Flask(__name__)的Flask应用程序后,添加以下代码,以访问config.json-配置值。

# mail configuration
mail_settings = config_data['mail_settings']
app.config.update(mail_settings)

# database configuration
db_settings = config_data['database']
app.config.update(db_settings)