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