如何使用 'beforeunload' 事件方法通过 Flask 进行路由,以便在 browser/tab 关闭时在 Python 中执行任务?
How to use the 'beforeunload' event method to route through Flask so a task gets executed in Python when a browser/tab is closed?
我有一个使用 Flask/Python/SQLAlchemy 制作的功能完美的网站,但在使用它几分钟并关闭网站后,附加的 Postgre 数据库留下了我在刚刚关闭的会话中使用的记录,加上从以前的会话中存储的所有记录和这些记录没有进一步使用,应该被删除。
app.py
@app.route('/db_cleanup')
def db_cleanup():
db_table.query.filter_by(randomized = 100).delete()
return 'Database is clean.
我目前的解决方案是在关闭网站之前手动删除剩余数据以防止数据库变大。截至目前,我正在通过以下代码执行此操作。
index.html
<form action="/db_cleanup">
<input type="submit" value="DB Cleaner" />
</form>
现在我正在努力实现它以使用 'beforeunload' 事件方法自动使用 '@app.route('/db_cleanup') 路由,但我做不到它可以工作,我使用的代码是:
index.html
<script>
window.addEventListener('beforeunload', (event) => {
console.log('Success!!');
location.href = "/db_cleanup";
for (var i = 0; i < 500000000; i++) { }
event.preventDefault();
event.returnValue = '';
});
</script>
'beforeunload' 事件方法被正确触发,我可以通过控制台看到正确的 'Success!!' 消息,但不知何故没有路由到 '/db_cleanup'。
有人有什么建议或解决方案吗?
找到了解决方案并且运行良好。
我正在使用 AJAX 异步调用:
index.html
<script>
window.addEventListener('beforeunload', (event) => {
clean_db()
for (var i = 0; i < 500000000; i++) { };
event.preventDefault();
event.returnValue = '';
});
</script>
script.js
function clean_db() {
var_url = "/db_cleanup";
jQuery.ajax({
url: var_url,
success: function () {
pass;
}
});
return;
}
我有一个使用 Flask/Python/SQLAlchemy 制作的功能完美的网站,但在使用它几分钟并关闭网站后,附加的 Postgre 数据库留下了我在刚刚关闭的会话中使用的记录,加上从以前的会话中存储的所有记录和这些记录没有进一步使用,应该被删除。
app.py
@app.route('/db_cleanup')
def db_cleanup():
db_table.query.filter_by(randomized = 100).delete()
return 'Database is clean.
我目前的解决方案是在关闭网站之前手动删除剩余数据以防止数据库变大。截至目前,我正在通过以下代码执行此操作。
index.html
<form action="/db_cleanup">
<input type="submit" value="DB Cleaner" />
</form>
现在我正在努力实现它以使用 'beforeunload' 事件方法自动使用 '@app.route('/db_cleanup') 路由,但我做不到它可以工作,我使用的代码是:
index.html
<script>
window.addEventListener('beforeunload', (event) => {
console.log('Success!!');
location.href = "/db_cleanup";
for (var i = 0; i < 500000000; i++) { }
event.preventDefault();
event.returnValue = '';
});
</script>
'beforeunload' 事件方法被正确触发,我可以通过控制台看到正确的 'Success!!' 消息,但不知何故没有路由到 '/db_cleanup'。
有人有什么建议或解决方案吗?
找到了解决方案并且运行良好。
我正在使用 AJAX 异步调用:
index.html
<script>
window.addEventListener('beforeunload', (event) => {
clean_db()
for (var i = 0; i < 500000000; i++) { };
event.preventDefault();
event.returnValue = '';
});
</script>
script.js
function clean_db() {
var_url = "/db_cleanup";
jQuery.ajax({
url: var_url,
success: function () {
pass;
}
});
return;
}