我有一个简单的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行代码来完成这么简单的任务,所以我想我必须遗漏一些东西。
有什么想法吗?
答案 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']