Django - 显示动作进度

时间:2009-10-10 19:27:46

标签: django progress-bar

我有一个管理员控制的功能(导入数据库),可能需要一些时间才能完成,因此我想在此期间向用户显示一些反馈 - 例如进度条或只是一些消息。即使在长时间操作期间分批发送页面也足够了。

在Django中最简单的方法是什么?

2 个答案:

答案 0 :(得分:3)

  1. Ajax轮询 - 使用客户端计时器,您不断地在服务器上轮询它的状态。过程如下:用户配置数据库详细信息并点击“上传”。文件传输和页面请求在服务器上启动异步进程以执行数据库导入。当用户单击上载时,它会启动一个客户端计时器,该计时器会定期向服务器发送一个AJAX请求,询问它的进度。服务器返回JSON,客户端脚本确定它想要用它做什么。

  2. COMET - 我对此并不熟悉,但传统的AJAX通过客户端向服务器发送请求来工作。它被称为“拉”通信。在COMET,这是推动。即使服务器没有要求,服务器也会向客户端推送有关其进度的数据。与轮询相比,这会在服务器上产生较小的压力。 Google为使用COMET with Django的人提供了一些结果。

  3. 反向AJAX - 与COMET类似。 Reverse Ajax with Django

  4. (道歉,我最不知道最后2个,但我认为你至少想知道它们存在)

答案 1 :(得分:1)

没有某种客户端脚本,即Ajax,就没有办法做到这一点。您需要定期轮询服务器并显示对用户的响应。有a snippet显示了如何做到这一点。

当然,为了实现这一目标,您还必须将导入本身转移到离线流程。这将执行导入,并定期(在文件或数据库中)记录其进度,以便Ajax可以查询它。这样做的好方法可能是使用基于Django的分布式任务队列celery

最后,您需要一个Ajax将调用的简单视图,它将查询长时间运行的进程(或查看它创建的进度记录)并向客户端报告。

所以,相当复杂。