在Bottle驱动的应用程序中,我在哪里存储每个请求上加载的数据?

时间:2011-07-05 22:19:08

标签: python flask bottle

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

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

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

@app.route('/')
def index():
    param = g.config.get(...)
    ...
另一方面,在Bottle中,线程本地被认为是一件坏事,建议的存储数据库连接的方法是to write a plugin,它使用聪明的技巧分析处理程序的签名。虽然SQLite已经解决了这个问题,但是不存在其他任意的每个请求数据。

坦率地说,我不敢相信我应该编写60行代码来完成这么简单的任务,所以我想我必须遗漏一些东西。

有什么想法吗?

1 个答案:

答案 0 :(得分: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']