<p><strike>如果不想使用<a href="http://flask.pocoo.org/docs/0.12/quickstart/#sessions" rel="noreferrer">Sessions</a>跨路由存储数据的一种方法是</strike>(<strong>请参阅下面的更新</strong>):</p>
<pre><code>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)
</code></pre>
<p>注意:在访问<code>/dif</code>之前需要访问<code>/index</code>。</p>
<hr/>
<h3>更新</h3>
<p>根据davisim的评论,上面的代码不适合生产,因为它不是线程安全的。我用<code>processes=10</code>测试了代码,在<code>/dif</code>中得到了以下错误:</p>
<p><a href="https://i.stack.imgur.com/lUVrO.png" rel="noreferrer"><img src="https://i.stack.imgur.com/lUVrO.png" alt="internal server error for processes=10"/></a>
该错误表明<code>data.a</code>和<code>data.c</code>的值在<code>processes=10</code>时仍保持<code>None</code>。</p>
<hr/>
<p>因此,它证明了我们不应该在web应用程序中使用全局变量。</p>
<p>我们可以使用<a href="http://flask.pocoo.org/docs/0.12/quickstart/#sessions" rel="noreferrer">Sessions</a>或数据库,而不是全局变量。</p>
<p>在这个简单的场景中,我们可以使用会话来实现期望的结果。
使用会话更新代码:</p>
<pre><code>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)
</code></pre>
<p>输出:</p>
<p><a href="https://i.stack.imgur.com/HcHPH.png" rel="noreferrer"><img src="https://i.stack.imgur.com/HcHPH.png" alt="index"/></a>
<a href="https://i.stack.imgur.com/s3VxV.png" rel="noreferrer"><img src="https://i.stack.imgur.com/s3VxV.png" alt="dif"/></a></p>