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

如何在python flask中设置全局变量?,python,web,flask,server,global-variables,Python,Web,Flask,Server,Global Variables,我想设置一个全局变量,并将其用作各种函数的触发器。每个用户都有一个单独的全局变量。这用于跟踪以前的消息数据并继续对话。问题是,如何为每个用户管理单独的全局变量?我在服务器上部署应用程序后,该应用程序正在运行。当我尝试更改全局变量时,此变量适用于每个用户,而不仅仅是触发更改的单个用户 我使用的是没有DB的python flask 谢谢。我不确定我是否正确理解了您的问题,但也许您可以创建一个全局字典,其中key作为用户名,value作为消息 因此,每次要更新字典中的变量时,都可以根据用户名(字典的键

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

我使用的是没有DB的python flask


谢谢。

我不确定我是否正确理解了您的问题,但也许您可以创建一个全局字典,其中key作为用户名,value作为消息

因此,每次要更新字典中的变量时,都可以根据用户名(字典的键)访问相应的变量


你不需要一个全局变量来实现这一点,实际上,你在将来的任何时候都不需要它们,因为使用全局变量是一种不好的做法。有关详细信息,请参阅此链接

现在谈到您的问题,您可能需要flask的
g
模块,该模块创建一个上下文,该上下文在来自同一用户的多个请求上保持不变。您可以这样做:

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
请记住,对于每个用户,都会创建一个不同的应用程序线程,这样既不会共享变量,也不会共享它们的值。因此,对于每个用户,将有一个不同的
g
,但它将在来自同一用户的多个请求中保持不变。希望有帮助


Edit
g
对象是应用程序上下文的代理,不会在多个请求之间持久存在。它在整个应用程序中持续存在一个请求。

全局和每个用户是两个完全不同的东西。您应该搜索的关键字是“会话”。您写过:“您可能需要flask的g模块,它创建一个上下文,该上下文在同一用户的多个请求中持续存在”。但是,g是每个请求,而不是每个用户。它不会针对每个用户持续存在。它将仅在请求中保持。您已经编写了全局变量是错误的做法,OP应该使用Flask的
g
,但是Flask的
g
是一个全局变量@SewerynNiemiec
g
不是全局变量,它是应用程序上下文的代理。它在请求的应用程序上下文中保持不变。虽然,它不会在请求之间持久存在。@AnimeshKumar是的,但它完全充当全局变量。应用程序上下文是一种特殊的全局存储,它与全局变量具有相同的功能—它允许您存储来自任何地方的值,并从任何地方获取它们,因此它允许您编写与使用普通全局变量相同的意式代码。我并不是说全局变量总是不好的,但是如果你说OP不需要全局变量,那么就不要建议
g
@SewerynNiemiec-Gobal变量几乎总是不好的,但是使用
g
就不是了。它是由flask自身提供的一个模块,用于存储来自任何地方的价值,并从任何地方获取价值。它不会产生意大利面代码,因为无论何时遇到
g
,您都会意识到它是一个用于存储全局数据的烧瓶模块,您也会检查它的其他用途。
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