提问者:小点点

烧瓶和其他中的伪全局


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

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对上述问题的回答不是很令人满意:

很长一段时间以来,我一直是线程本地人的强烈反对者,但我最终不得不承认,它们让事情变得更容易,而不是更难。

...

事实上,你可以做“应用程序ctx”堆栈。顶部mydatabase_connection`从任何地方获取数据库连接都非常有用。

...

TL;DR:你不能没有线程局部变量,或者你有一个可怕的API。

我不认为_app_ctx_stack.top.mydatabase_connectionrequest.app.my_database_connection好。


共1个答案

匿名用户

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