如何在python Flask中设置全局变量?

Jul*_*Lee 5 python global-variables flask web server

我想设置一个全局变量并将其用作各种功能的触发器。每个用户都有一个单独的全局变量。这用于跟踪以前的消息数据并进行对话。问题是如何为每个用户管理一个单独的全局变量?一旦我将它部署到服务器中,该应用程序就会运行。当我尝试更改全局变量时,此变量适用于每个用户,而不仅仅是触发其更改的单个用户。

我正在使用没有数据库的 python 烧瓶。

谢谢你。

Ani*_*mar 3

为此,您不需要全局变量,而且说实话,您将来的任何时候都不需要它们,因为使用全局变量是一种不好的做法。详情请参考此链接,为什么全局变量是邪恶的?

现在谈到您的问题,您可能需要gFlask 模块来创建一个上下文,该上下文在来自同一用户的多个请求中持续存在。你可以这样做:

from flask import g

...

def get_messages():
    messages = getattr(g, '_messages', None)
    if messages is None:
        g._messages = []  # to store messages you may use a dictionary

    return g._messages

def add_message(message):
    messages = get_messages()
    messages.append(message)
    setattr(g, '_messages', messages)
    return messages
Run Code Online (Sandbox Code Playgroud)

请记住,为每个用户创建应用程序的不同线程,因此变量及其值都不会共享。因此,对于每个用户来说,都会有不同的g,但它会在同一用户的多个请求中持续存在。希望能帮助到你!

编辑g对象是应用程序上下文的代理,不会在多个请求中持续存在。它在整个应用程序中持续存在单个请求。

  • 您已经写道:“您可能需要 Flask 的 g 模块,它创建一个上下文,该上下文在来自同一用户的多个请求中持续存在”。但是,g 是针对每个请求的,而不是针对每个用户的。它不会针对每个用户持续存在。它只会在请求内持续存在。 (3认同)