如何从Flask API调用中删除全局变量?

时间:2016-06-28 11:29:58

标签: python python-3.x flask global-variables

我正在开发一个运行Foo的Flask应用程序。运行Foo后,应该可以点击hostname:8080处的端点执行某些API调用,以更改Foo的状态。

下面是一个相当小的(虽然不完整)示例。引用的方法和函数并不是非常重要,因为问题是关于状态受到影响的全局对象

__foo = None
app = Flask(__name__)

@app.route("/start_foo")
def start_foo():
    return __foo._do_foo_init() or ""

def run_foo(foo, debug=False):
    """
    Entry point for clients to run a foo
    :param foo:
    :return:
    """
    global __foo
    __foo = foo
    t = threading.Thread(target=delayed_registration, args=(foo,))
    t.start()
    app.run(host=hostname, debug=debug, port=8080)

当用户拨打run_foo时,她会提供Bar,这是Foo的子类,但这无关紧要。

我在考虑将@app.route作为类的一个方法并让foo作为类的成员,但我不知道这是否可以在Flask中实现。

是否有人建议如何删除上述应用程序中的全局__foo

1 个答案:

答案 0 :(得分:1)

在flask中,您应该将应用程序全局对象存储在flask.g(see the documentation for more information)中。确实,这是"本地"到应用程序,但在烧瓶中应该可以在同一个python解释器中有多个应用程序。烧瓶documentation说明:

  

由于Flask设计的一个支柱是你可以在同一个Python进程中拥有多个应用程序。

因此除了配置之外的所有内容都不应该是全局的,而应该是烧瓶应用程序的本地内容。