Flask等人的伪全局变量

时间:2014-07-05 08:12:34

标签: python flask

我正在寻找这个问题的合理答案:

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_connectionrequest.app.my_database_connection更好。

1 个答案:

答案 0 :(得分:0)

你不应该只考虑控制器(你可以访问请求对象)。在您的应用程序的其他层中也很重要(想象一下可重用的服务层,其中有重要的业务规则)