【问题标题】:How to import from config file in Flask?如何从 Flask 中的配置文件导入?
【发布时间】:2013-02-13 20:43: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 网络服务器会重新启动,但它并没有说在 app/myFile.py 中找到更改重新启动它只是重新启动。

我需要做什么才能使用

from config import basedir

在我的 python 文件中。我没有看到在 __init__.py 中为 forms.py 做了什么特别的事情。

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

from flask import Flask
from config import basedir

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

【问题讨论】:

    标签: python python-2.7 flask


    【解决方案1】:

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

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

    【讨论】:

    • 我的 init.py 文件中有 app.config.from_object('config')。你知道为什么“from config import basedir”在views.py和forms.py中有效吗?
    • 谢谢伙计。在文档中。没有说明如何从其他文件访问配置设置。
    【解决方案2】:

    经过一番摆弄(以及来自网络的一点帮助),我可以进一步改进这一点,方法是将代码更改为包含配置:

    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
    

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

    【讨论】:

    • app.config.from_object 如何知道配置模块?我有config 模块和__init__.py 模块。我不断收到此错误:ImportStringError: import_string() failed for 'config.ProductionConfig'
    • 我看到了同样的错误。我的可安装应用程序代码位于app/src/myapp/,我的__init__.py 也位于其中。因此INSTANCE_PATHapp/src/instance/。你能解决这个@Ciastopiekarz 吗?
    • 这里应该是app.config.from_object('config.ProductionConfig') 而不是app.config.from_object(config.ProductionConfig),其中configConfig 类的一个实例?
    • @greg 不,from_object 接受一个字符串,然后用于动态导入模块。见flask.palletsprojects.com/en/1.1.x/config/…。是的,它的名字很糟糕而且非常混乱。使用字符串来引用模块也不是最好的主意 - 降低了 IDE 跟踪使用情况的能力。
    • 这就是忘记了良好设计的新语言的全部问题;这不酷。是代码还是配置?代码和配置应该分开。 12factor.net
    【解决方案3】:

    我在我的烧瓶项目 - 根文件夹中创建了一个 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 中使用如下:

    首先导入flask json库:

    import json
    

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

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

    在创建 Flask 应用程序后添加以下代码,命名为 app app = Flask(__name__),如下所示,用于访问 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)
    

    【讨论】:

    • 在投票之前,我的要求是我们必须解释错误的部分。 @Siva,在 Flask 应用程序中,我们可以在根文件夹中创建一个 config.py 文件进行配置。 OP & 每个人都在讨论那个 config.py 文件。 flask.palletsprojects.com/en/1.1.x/config/…
    • 对不起,当我开始创建配置文件时,我没有正确检查文件,无论我在项目中使用哪个进行配置,@SarathlalN Tnx 给你,我现在可以理解我的错误了。
    猜你喜欢
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    相关资源
    最近更新 更多