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

时间:2017-09-03 08:42:40

标签: python web flask server global-variables

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

我在没有数据库的情况下使用python flask。

谢谢。

2 个答案:

答案 0 :(得分:1)

不确定我是否正确理解了您的问题,但也许您可以使用密钥作为用户名和值来创建一个全局字典作为消息。

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

userMsg = {"John":"hello"} #existing user
# update John's msg
userMsg["John"] = "bye"
# now userMsg is {"John":"bye"}

# add new user if user does not exist
userMsg["Mary"] = "Your Message Here"
# now userMsg is {"John":"bye", "Mary":"Your Message Here"}

答案 1 :(得分:1)

你不需要一个全局变量,真正说你将来不会再需要它们,因为使用全局变量是一种不好的做法。有关详细信息,请参阅此链接why are global variables evil?

现在遇到你的问题,你可能需要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,但它将持续来自同一用户的多个请求。希望它有所帮助!

相关问题