【问题标题】:Flask - Global Variable is not persisting on page reload [duplicate]Flask - 全局变量在页面重新加载时不持久[重复]
【发布时间】:2017-11-14 21:52:11
【问题描述】:

我正在尝试在我的烧瓶应用程序中使用全局变量:

from flask import Flask, render_template, request, jsonify

app = Flask(__name__)

varGlobal = None
@app.route('/')
def home():
    return render_template('home.html')

@app.route('/api/prepare', methods=['POST'])
def prepare():

    if varGlobal is None:
       varGlobal = "some_val"
    return varGlobal

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8989, debug=True)

所以当我的页面加载并点击api/prepare 我得到:

UnboundLocalError: local variable 'varGlobal' referenced before assignment

我希望这个varGlobal 在我的应用程序运行期间一直存在。即使我重新加载页面。我该怎么做?

【问题讨论】:

  • 在准备函数定义下添加一行“global varGlobal”
  • 您分配给prepare 中的varGlobal。所以它不是一个全局变量。使用global varGlobal 作为prepare 的第一行。话虽如此,全局变量通常不是一个好主意。
  • 注意,你几乎肯定不想这样做,因为它在生产中无法正常工作。

标签: python flask global-variables


【解决方案1】:

我不会再提及您回溯的原因,这主要是因为您没有使用 global 关键字,因此无法从您的方法中正确绑定全局变量,正如 cmets/answers 中已经阐明的其他内容.

现在,我强烈建议您避免使用全局变量,特别是在多线程环境中,它们是邪恶的。当产生不同的线程(即:多个用户)时,您的代码将严重失败。

相反,我建议您熟悉为这个非常具体的任务创建的一些烧瓶实用程序,例如 http://flask.pocoo.org/docs/0.12/api/#flask.Flask.app_ctx_globals_class

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多