2009-10-10 69 views
6

我有一个管理控制功能(导入数据库)可能需要一些时间来完成,所以我想表明在此期间一些反馈给用户 - 例如一个进度条,或者只是一些消息。即使在漫长的行动中发送页面也是足够的。Django的 - 显示操作进度

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

+0

为什么没有进步吧?..你可以详细一点,请? – 0100110010101 2009-10-10 20:02:08

+0

进度条也可以,但我不知道如何从执行动作的函数中控制它 – hmp 2009-10-10 20:17:23

回答

1

有没有办法做到这一点没有某种形式的客户端脚本,即阿贾克斯。您需要定期轮询服务器并向用户显示响应的内容。有a snippet显示如何做到这一点。

当然,要做到这一点,你还必须进口本身农场关闭以离线过程。这将执行导入操作,并定期(在文件或数据库中)记录进度,以便Ajax可以查询它。这样做的好方法可能是使用celery,这是基于Django的分布式任务队列。

最后,你需要一个简单的认为,阿贾克斯将调用,这将查询长时间运行的过程(或看进度记录,它创建),并报告给客户端。

所以,相当复杂。

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

  2. COMET - 我不熟悉这一点,但传统的AJAX的工作原理是在客户端发送到服务器的请求。它被称为“拉”通信。在COMET中,这是推动。即使服务器没有要求,服务器也会将数据推回给客户端。这造成了服务器上比轮询更少的情况。 Google为使用COMET with Django的人提供了一些结果。

  3. 反向AJAX - 彗星相似。 Reverse Ajax with Django

(我道歉,我知道至少约过去2,但我想你至少要知道它们的存在)