2012-07-27 52 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