在两个@ app.route之间共享全局变量

时间:2019-04-01 18:12:27

标签: python flask global

调用“ / setvalue ”路由后,我将在全局变量中设置一些数据。

那么任何想要检索此数据的人(甚至从Web应用程序外部,浏览器中)都可以访问它。

问题是检索数据的请求来自外部,例如从任何浏览器访问URL的客户端都可以获取此数据

我尝试如下使用“ g ”,但无法正常工作:

from flask import g

@app.route("/setvalue", methods = ['POST'])
def setvalue():  
    content = request.get_json()
    g.content = content
    return format(content) #"set"


@app.route("/getvalue" )
def getvalue():      
    return g.content 


from flask import Flask, jsonify, request
from flask import g

如上面的代码所示,我将调用“ / setvalue ”来启动Web应用。

调用“ / getvalue ”的人将获得启动的值。

但是g.content似乎不能这样工作。我收到500错误。

我的代码缺少什么?提前致谢。非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我不确定这是否是处理此问题的最佳方法,但可以快速解决。

您可以先尝试将变量设置为默认值,然后使用global关键字在函数内部访问它。

content = "Some default value"
def setvalue():
     global content
     content = request.get_json()

def getvalue():    
     global content  
     return content

重要说明:这不是线程安全的。您应该使用内存数据库或一些锁。

编辑:基于此link,我认为这实际上在python中可能是线程安全的。尽管如果您正在使用流程,则仍然需要数据库。