python - Flask 表示会话开始/结束
问题描述
烧瓶中是否有可能只做一次某事,例如当应用程序启动或关闭时?
我需要在文件中存储一些东西,当烧瓶应用程序启动时,只要它打开就可以读取它,最好在应用程序关闭时删除它,或者至少在下一个会话中覆盖它.
我想过声明一个“bool”“setup_done”,但我找不到一个好的地方来声明它。我希望它保持不变,即使页面被刷新,也只能在烧瓶应用程序本身启动或关闭时更改。
我的尝试是:
@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 在 myfunction 中使用时是未知的。
我希望有一个基于“简单编程”的解决方案,而不是导入新的包或功能。
如果表达不好,我很抱歉,我希望它清楚我想要做什么。
解决方案
如果您使用应用程序工厂模式,这很简单。
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
)会发生什么,因为您的文件写入功能可能会运行多次;每个进程一个。
您在“会话”和“应用程序”之间跳转可互换性。为了给你更多细节,我需要确切地知道你正在尝试做什么,因为这些是不同的事情。
推荐阅读
- node.js - Cron - 每年 1 月 1 日 00:00 或 12:00 am 运行一次
- xgboost - XGBRegressor 损失函数自定义
- mysql - 如何使用 SYSBENCH 测试 MySQL NDB 集群(NDB 存储引擎)的性能?
- arrays - 为什么我的反转数组功能不起作用?
- c# - 使用外部提供商登录时无法获得分配的用户角色
- java - Hazelcast:禁用集群
- python - PyQt5 将 QScrollArea 添加到 Frame 或 Widget
- c++ - C ++在构造函数中删除对象?
- typescript - Socket.IO NestJS 无法连接:不断断开/重新连接
- javascript - 第三次点击后隐藏按钮