如果您不想使用Sessions 跨路由存储数据的一种方法是(请参阅下面的更新):
from flask import Flask, render_template
app = Flask(__name__)
class DataStore():
a = None
c = None
data = DataStore()
@app.route("/index")
def index():
a=3
b=4
c=a+b
data.a=a
data.c=c
return render_template("index.html",c=c)
@app.route("/dif")
def dif():
d=data.c+data.a
return render_template("dif.html",d=d)
if __name__ == "__main__":
app.run(debug=True)
注意:访问/dif之前需要先访问/index。
更新
根据大卫主义的评论,上面的代码不是生产友好的,因为它不是线程安全的。我已经用processes=10 测试了代码并在/dif 中得到了以下错误:
错误显示data.a 和data.c 的值在processes=10 时保持None。
因此,它证明了我们不应该在 Web 应用程序中使用全局变量。
我们可以使用Sessions 或数据库来代替全局变量。
在这个简单的场景中,我们可以使用会话来实现我们想要的结果。
使用会话更新代码:
from flask import Flask, render_template, session
app = Flask(__name__)
# secret key is needed for session
app.secret_key = 'dljsaklqk24e21cjn!Ew@@dsa5'
@app.route("/index")
def index():
a=3
b=4
c=a+b
session["a"]=a
session["c"]=c
return render_template("home.html",c=c)
@app.route("/dif")
def dif():
d=session.get("a",None)+session.get("c",None)
return render_template("second.html",d=d)
if __name__ == "__main__":
app.run(processes=10,debug=True)
输出: