0

我有一个简单的 Bottle 应用程序,它将其配置存储在一个文本文件中。自然,我需要该配置在应用程序的几乎每个处理程序中都可用,并且我希望在每次请求时都重新加载它。

在 Flask 中,我可以将配置文件加载到一个ConfigParser实例中before_request,并将对它的引用放入g对象的属性中,就像 Flask 文档中描述的作为连接 SQLite的一种方式一样。然后该g对象将在每个处理程序中可用:

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

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

另一方面,在 Bottle 中,线程本地被认为是一件坏事,存储数据库连接的建议方法是编写一个插件,该插件使用巧妙的技巧分析处理程序的签名。虽然 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 回答