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

Sie*_*cje 35 python flask python-2.7

我从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
Run Code Online (Sandbox Code Playgroud)

在views.py,forms.py我能够使用

from config import basedir
Run Code Online (Sandbox Code Playgroud)

但是我不能在myFile.py中使用它

我补充道

import Flask 
Run Code Online (Sandbox Code Playgroud)

当我修改它时,Flask Web服务器重新启动,但它没有说app/myFile.py中发现的更改重新启动它只是重新启动.

我需要做什么才能使用

from config import basedir
Run Code Online (Sandbox Code Playgroud)

在我的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
Run Code Online (Sandbox Code Playgroud)

Doo*_*beh 57

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

然后在您的任何文件中,您只需导入应用程序对象即可访问该词典.我倾向于访问该app对象,from flask import current_app as app然后只是app.config['MY_SETTING']为了得到我关心的值.阅读文档中的更多内容.

  • 谢啦。在文档中。没有解释如何从其他文件访问配置设置。 (5认同)

mrA*_*ias 20

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

app.config.from_object('config.ProductionConfig')
Run Code Online (Sandbox Code Playgroud)

这为配置提供了这种酷炫的模式:

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
Run Code Online (Sandbox Code Playgroud)

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

  • `app.config.from_object`如何知道config模块?我有config模块和__init__.py模块。我不断收到此错误:“ config.ProductionConfig”的“ ImportStringError:import_string()失败” (2认同)
  • 这就是新语言的全部问题,它们忘记了良好的设计;这不酷。是代码还是配置?代码和配置应该分开。https://12factor.net/ (2认同)