3
from django.shortcuts import get_object_or_404, render
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from polls.models import Choice, Poll
def vote(request, poll_id):
p = get_object_or_404(Poll, pk=poll_id)
try:
selected_choice = p.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
# Redisplay the poll voting form.
return render(request, 'polls/detail.html', {
'poll': p,
'error_message': "You didn't select a choice.",
})
else:
selected_choice.votes += 1
selected_choice.save()
# Always return an HttpResponseRedirect after successfully dealing
# with POST data. This prevents data from being posted twice if a
# user hits the Back button.
return HttpResponseRedirect(reverse('polls:results', args=(p.id,)))
這幾天我在學習Django框架。我無法理解 爲什麼重定向對於處理POST數據之後的安全性很重要。 其實有一個關於它的解釋,上面有如下的評論。爲什麼在處理POST數據後重定向很重要?
# Always return an HttpResponseRedirect after successfully dealing
# with POST data. This prevents data from being posted twice if a
# user hits the Back button.
可能有人可以解釋爲什麼更多的詳細原因我是一個初學者是 知道一些;(提前
謝謝:)
請參閱[Post/Redirect/Get - wikipedia](http://en.wikipedia.org/wiki/Post/Redirect/Get)。 – falsetru
這不是爲了安全 - 在成功發佈後防止惡意用戶發送重定向的模式中沒有任何問題。這是爲了您的用戶的方便,特別是防止一些意外的雙重意見或意外狀態的提交,如鏈接所述。我並不反對這個參考文獻 - 我只是想強調一下,爲了安全起見,您必須記住隨時可以提交任何類型的請求和任何數據,並且您的服務器端應用程序必須適當地處理潛在的惡意數據。 –