0

構成をテキスト ファイルに保存する単純な Bottle アプリがあります。当然のことながら、アプリのほぼすべてのハンドラーで構成を使用できるようにする必要があり、すべての要求で構成を再読み込みする必要があります。

Flask では、 SQLite を接続する方法として Flask のドキュメントで説明されているように、構成ファイルをConfigParserインスタンスにロードしbefore_request、それへの参照をオブジェクトの属性に入れることができました。オブジェクトは、すべてのハンドラーで使用できます。gg

@app.before_request
def before_request():
    g.config = load_config()

@app.route('/')
def index():
    param = g.config.get(...)
    ...

一方、Bottle では、スレッド ローカルは悪いことと見なされます。DB 接続を格納する推奨される方法は、巧妙なトリックを使用して署名のハンドラーを分析するプラグインを作成することです。また、問題は SQLite では既に解決されていますが、他の任意の要求ごとのデータの場合はそうではありません。

率直に言って、このような単純なタスクを実行するのに 60 行のコードを書かなければならないなんて信じられないので、何か抜けているに違いないと思います。

何か案は?

4

1 に答える 1

1

リクエストごとにリロードしたいので、関数を使用しないのはなぜですか?

def get_config():
    with open('config.json') as f:
        return json.load(f)

@route('/')
def index():
    config = get_config()
    return 'Welcome to %s' % config['site_name']

それをプラグインにラップしたい場合、それはかなり簡単です:

def config_plugin(callback):
    def wrapper(*args, **kwargs):
        kwargs['config'] = get_config()
        return callback(*args, **kwargs)
    return wrapper

install(config_plugin)

@route('/')
def index(config):
    return 'Welcome to %s' % config['site_name']
于 2011-07-05T23:11:35.717 に答える