2012-10-05 79 views
0

我的網站有問題。還有它是:Django塊請求

在這種情況下沒有問題:

  • 用戶A做的請求。
  • Django服務器更新數據...
  • 對象1已更新。
  • 對象2已更新。
  • 對象3已更新。
  • Django呈現結果。
  • 用戶A請求。

問題apear在這種情況下:

  • 用戶A做的請求。
  • Django服務器更新數據...
  • 對象1已更新。
  • 對象2已更新。
  • 用戶A做另一個請求!
  • 用戶A做另一個請求!
  • Django呈現結果。

問題是,如果用戶在服務器未完成工作時發出請求,服務器會停止進程並且數據不再有效。

我想我必須阻止客戶端(通過顯示爲例加載消息),但我想成爲河畔用戶使服務器的請求,如果另一treatemment仍在工作。

感謝您的時間。

回答

1

這聽起來像你有一個漫長的運行過程,用戶厭倦了等待,點擊瀏覽器中的「停止」另一種情況是 - 用戶打開另一個選項卡並再次發送相同的請求。

解決此問題的幾種方法。

  1. 使用transaction middleware可防止數據庫對象在請求中斷時被破壞。

  2. 使用像celery這樣的任務隊列。在第一個請求中,將您的任務卸載到隊列/代理。向用戶發送消息,表明他們的請求已被接受進行處理。現在用戶可以自由發送重複請求。如果他們這樣做,你可以檢查隊列的狀態,並拒絕重複的請求。