2

我想扩展一个大致使用以下代码的应用程序:

app = Flask('app')
app.config.from_pyfile('default_config.py')
app.config.from_pyfile('local_config.py', silent=True)

在那里,可以使用 访问设置app.config['value']。在我的扩展中,我只想使用配置文件,没有 Flask 应用程序,也没有创建 Flask 对象。

我唯一的想法是:

import default_config as dc
import config as cc

vars_dc = [var for var in dir(dc) if not var.startswith('__')]
settings = {var: getattr(dc, var) for var in vars_dc}
vars_cc = [var for var in dir(cc) if not var.startswith('__')]
settings.update({var: getattr(cc, var) for var in vars_cc})

这似乎不是一个好的解决方案,因为有很多陷阱需要考虑(配置文件中的错误等,所以我必须重新实现所有异常处理和东西)

有没有实现这种功能的模块?

* 编辑 *

#default_config.py
HOST = 'myhostname'
PORT = 7453
DEBUG = False
MY_URLS = []
4

3 回答 3

1

我不确定我是否理解正确,但是如果您在扩展代码中谈论使用配置,只要您__init__定义为:就可以直接使用它:

class MyExtension(object):

def __init__(self, app=None):
    self.app = app
    if app is not None:
        self.init_app(app)

def init_app(self, app):
    # now you can use app.config
    app.config.get('HOST')
于 2013-07-16T14:53:29.527 回答
1

是什么阻止你像 Flask 那样做呢

于 2013-07-16T13:08:26.340 回答
1

迟到的答案,但我相信这应该有效:

from importlib import import_module

app.config = import_module("default_config").__dict__
于 2015-05-04T11:46:37.497 回答