如何返回一个网站并自动重定向到加载较慢的另一个网站
我让用户输入一些数据,然后把他重定向到一个“结果”网站,这个网站加载需要几秒钟。
我不喜欢这样,因为用户在等待的时候没有任何反馈,根本不知道服务器没有崩溃,他的结果正在生成。所以我在想,能不能给用户显示一个“加载中”的页面,上面写着“请稍等”,然后再自动把他重定向到“结果”页面。这样用户在等待的时候就能看到这个“请稍等”的页面,而不是一直盯着结果页面,因为Flask在计算完成之前是不会显示页面的。
[尝试澄清] 其中一个页面加载慢,是因为它在等待一个文件上传。另一个页面加载慢是因为它的功能在等待来自第三方API的数据。
我该如何在Flask中实现这个呢?
2 个回答
2
我本来想推荐用Celery来解决这个问题,但有人刚在Flask的邮件列表上发了个帖子,这个可能是个更简单的解决方案:Hello-Redis-Tasks。不过如果你还是想用Celery的话,可以看看这个:Celery中的自定义状态
1
Flask的文档中有一部分讲到了如何为文件上传实现进度条,你可以查看这个链接。你可以选择很多客户端的解决方案来显示上传的进度,然后在上传完成后进行重定向。
对于服务器端需要长时间运行的过程,你有几种选择:
- 提前获取(并缓存)来自响应慢的API的数据。
- 用JavaScript劫持链接的动作,发起一个ajax请求来获取数据 - 更新页面上的状态信息,让用户知道一切还在正常进行。
- 采用三步走的流程。第一个页面有一个链接指向“请稍等...”的页面(第二个页面)。第二个页面有一个元刷新标签,指向第三个页面(
<meta http-equiv="refresh" content="0; url=/path/to/page3">
)。