单个Flask routes.py中全局变量的替代方案(5个函数中的20个变量)

单个Flask routes.py中全局变量的替代方案(5个函数中的20个变量),flask,Flask,我已经在我的笔记本电脑上编写了一个应用程序,在开发过程中运行良好。 它全部位于一个routes.py中,并在各种函数之间使用大约20个全局变量 除了使用全局变量外,我还像这样将其传递到HTML,这似乎还可以 返回渲染模板'graph.html',标签=线条标签等 但是现在我来在一个虚拟机上使用uwsgi部署这个应用程序,同样的代码在第一次重定向后崩溃 NameError:未定义名称“没有\u个插槽” 看来使用uwsgi时全局变量的工作方式不一样?变量没有被传递或保留 在这里快速搜索表明全局变量是

我已经在我的笔记本电脑上编写了一个应用程序,在开发过程中运行良好。 它全部位于一个routes.py中,并在各种函数之间使用大约20个全局变量

除了使用全局变量外,我还像这样将其传递到HTML,这似乎还可以

返回渲染模板'graph.html',标签=线条标签等

但是现在我来在一个虚拟机上使用uwsgi部署这个应用程序,同样的代码在第一次重定向后崩溃

NameError:未定义名称“没有\u个插槽”

看来使用uwsgi时全局变量的工作方式不一样?变量没有被传递或保留

在这里快速搜索表明全局变量是一件坏事。 我认为他们可以在使用该网站的不同用户之间传递,对吗?如果是这样,那就糟糕了

在我的情况下,即我只想存储一些所有函数都可以使用的单输入变量,以及一些用于图形数据等的DICT

最好的方法是什么?一个可以在多用户网站中扩展的网站

会议是一个潜在的前进方向吗

任何帮助或指示都将不胜感激。

不要在Flask应用程序中使用全局变量。 存储静态变量

如果您需要存储在运行时不会更改且在多个位置使用的静态变量。最好将它们存储在config对象中

您可以通过cfg文件或其他方式实例化它们,然后通过app对象中的config对象(如果您有)或其当前的代理应用程序来访问它们

存储动态变量

如果需要存储动态变量,请使用应用程序上下文

g对象用于在同一请求中存储从一个函数到另一个函数的全局数据,而不是在请求之间共享数据

,您可以在官方示例中找到一个使用g定义和访问数据库的好例子

在请求之间共享变量

如果您需要在同一会话中共享不同请求中的变量。然后可以使用Flask中的会话对象

在用户之间共享变量


此时,您需要后端存储,如Redis、Memcached或数据库。根据您的需要,有许多不同的扩展来处理此问题。

谢谢。所以我想澄清一下。变量比请求之间的跨度大,在函数之间使用会话ie session[sum_total]变量,但对于同一请求,使用不离开函数的g ie g.sum_total变量,使用标准变量命名?ie sum_重写代码的总时间:
from flask import current_app

def malfunction(a, b):
    current_app.config.get("MY_VAR", None)
    # or
    current_app.config["MY_VAR"]