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

2024-06-01 13:08:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我从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__.pyfor forms.py中,我没有看到任何特殊的操作

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

from flask import Flask
from config import basedir

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

Tags: 文件frompyimportconfigapphttpflask
3条回答

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

然后,在任何文件中,您都可以导入app对象以访问该字典。我倾向于通过执行from flask import current_app as app访问app对象,然后只app.config['MY_SETTING']获取我关心的值Read up more in the documenation

我在flask项目根文件夹中创建了一个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 app = Flask(__name__)的Flask应用程序(如下所示)后添加以下代码,以访问config.json-configuration值

# 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)

经过一点修改(以及“网络”的一点帮助),我可以通过将代码更改为包含配置来进一步改进这一点:

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

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

相关问题 更多 >