我正在寻找这个问题的合理答案:
https://news.ycombinator.com/item?id=4207314
我毫不怀疑,如果我挖掘它然后它将是有意义的,但我的第一直觉是这样的:这个复杂性(代理对象线程本地,上下文堆栈等)的多少是由于这样做:from flask import request只是一个坏主意? 也许事情会更容易,而不是:from flask import request ... @app.route('/'): def index(): return "Hello from %s" % request.args.get('name')我们做了:@app.route('/'): def index(request): return "Hello from %s" % request.args.get('name')
Armin的回应以上不太令人满意:
很长一段时间我都是线程本地人的巨大反对者,但最后我不得不承认他们让事情变得更容易而不是更难。
......
您可以执行`_app_ctx_stack.top.mydatabase_connection`以从任何地方获取数据库连接这一事实非常有用。
......
TL; DR:你没有线程本地人,或者你有一个可怕的API。
我不知道_app_ctx_stack.top.mydatabase_connection
比request.app.my_database_connection
更好。
答案 0 :(得分:0)
你不应该只考虑控制器(你可以访问请求对象)。在您的应用程序的其他层中也很重要(想象一下可重用的服务层,其中有重要的业务规则)