烧瓶中是否有可能仅做一次操作,例如该应用何时启动或关闭?
启动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时未知。
我希望有一个基于“简单编程”的解决方案,而不是导入新的程序包或函数。
对不起,如果表达不好,我希望它清楚我想做什么。
答案 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
之类的东西)运行应用程序会发生什么,因为您的文件写入功能可能会多次运行;每个过程一个。
您可以在“会话”和“应用”之间切换互换性。为了给您更多细节,我需要确切地知道您要尝试执行的操作,因为这些是不同的事情。