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

遅い答えですが、これでうまくいくと思います:

from importlib import import_module

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