烧瓶表示会议开始/结束

时间:2020-07-29 07:51:34

标签: python flask

烧瓶中是否有可能仅做一次操作,例如该应用何时启动或关闭?

启动flask应用程序时,我需要将某些内容存储在文件中,然后只要它处于打开状态就可以读取它,最好是在关闭应用程序时将其删除,或者至少将其覆盖下届会议。

我想到要声明一个“布尔”“ setup_done”, 但是我找不到合适的地方来声明它。我希望它保持不变,即使刷新页面,也只能在flask应用程序本身启动或关闭时进行更改。

我的尝试是:

@app.route('/')
def myfunction:
    if not setup_done:
         do_setup()
         setup_done = True
    else:
         do_something_else()

if __name__ == "__main__":
    setup_done=False
    app.run(debug=DEVELOPMENT_ENV)


但是,当然,在我的函数中使用变量setup_done时未知。

我希望有一个基于“简单编程”的解决方案,而不是导入新的程序包或函数。

对不起,如果表达不好,我希望它清楚我想做什么。

2 个答案:

答案 0 :(得分:0)

尝试在函数外部和导入之后声明bool变量。像这样:

setup_done=False

@app.route('/')
def myfunction:
    if not setup_done:
         do_setup()
         setup_done = True
    else:
         do_something_else()

if __name__ == "__main__":
    app.run(debug=DEVELOPMENT_ENV)

答案 1 :(得分:0)

如果使用application factory模式,这很简单。

from flask import Flask


def create_app():
    app = Flask('__name__')
    print("RUNNING SETUP TASKS") # This is where your function call goes
    return app

app = create_app()

@app.route('/')
def home():
    return "Hello"

if __name__ == '__main__':
    app.run(debug=True)

您会注意到,我没有将其附加到基本路线(@app.route('/'))上,因为a)要求用户访问该路线,而b)每次有人访问该路线时都将运行。还有诸如before_first_request之类的其他机制。

话虽如此,我将需要研究如果您通过使用gunicorn(特别是对于prefork之类的东西)运行应用程序会发生什么,因为您的文件写入功能可能会多次运行;每个过程一个。

您可以在“会话”和“应用”之间切换互换性。为了给您更多细节,我需要确切地知道您要尝试执行的操作,因为这些是不同的事情。