2009-10-10 70 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,但我想你至少要知道它們的存在)