2012-07-27 39 views
2

我是fourth page of the Django tutorial附近開始和看vote視圖,在最後是這樣的:Django的教程,後退按鈕混亂

# Always return an HttpResponseRedirect after successfully dealing 
# with POST data. This prevents data from being posted twice if a 
# user hits the Back button. 

嘗試過的vote觀點與正常HttpResponse代替HttpResponseRedirect,我可以看到在POST後,應該返回瀏覽器的重定向,以便如果用戶點擊刷新按鈕,則重複提交的可能性較小。 (我注意到Opera沒有發出「你即將重新提交數據」警告!)。

但是,這是刷新按鈕 - 我不明白如何與後退按鈕的問題。我錯過了什麼?

回答

4

如果您轉到其他頁面然後返回,則POST請求將位於歷史記錄中。然後向前返回實際上與刷新相同。

沒有重定向,請求列表應作出,因爲存儲在歷史,將是這樣的:

  • GET /調查/ 1/
  • POST /調查/ 1 /表決/
  • GET /東西,否則/

通過重定向,省略了POST請求和它被重定向到取代它的位置:

  • GET /調查/ 1/
  • GET /調查/ 1 /結果/
  • GET /東西,否則/
+1

我希望我不是啞巴,我不能重新創建前進和後退效果與刷新效果相同。如果沒有在Chrome和Opera中重定向,並且如果我繼續前進到/ something-else然後返回,則dev服務器日誌不會顯示任何新請求。 – 2012-07-30 15:10:33

+0

這可能是緩存的特殊情況,以避免出現此類問題。他們已經這樣做了,以便您需要手動刷新頁面(在這一點上它會提醒你)來證明問題。 (較老的瀏覽器不會阻止你這樣做。) – 2012-07-31 05:05:07

+0

啊對,新瀏覽器緩存,這樣就不會發生這個問題 – 2012-07-31 12:50:55