我正在使用Django教程进行Tango,并且已经成功完成了这些教程,但是我在官方Django Polls教程中注意到了以下内容:
def vote(request, question_id):
p = get_object_or_404(Question, pk=question_id)
try:
selected_choice = p.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
# Redisplay the question voting form.
return render(request, 'polls/detail.html', {
'question': 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,)))
这里要注意的部分是“在成功处理POST数据后始终返回HttpResponseRedirect”。但是,在Tango with Django教程中:
def add_page(request, category_name_url):
context = RequestContext(request)
category_name = decode_url(category_name_url)
if request.method == 'POST':
form = PageForm(request.POST)
if form.is_valid():
page = form.save(commit=False)
try:
cat = Category.objects.get(name=category_name)
page.category = cat
except Category.DoesNotExist:
return render_to_response('rango/add_category.html', {}, context)
page.views = 0
page.save()
return category(request, category_name_url)
else:
print(form.errors)
else:
form = PageForm()
return render_to_response('rango/add_page.html',
{'category_name_url': category_name_url,
'category_name' : category_name,
'form' : form}, context)
注意尽管使用了POST数据,但是缺少HttpResponseRedirect。我不知道这是否正确?
我在这里看过:Django HttpResponseRedirect
此处:Django:HttpResponseRedirect无法正常工作
此处:Django HttpResponseRedirect与render_to_response-如何获取登录表单以按照我需要的方式进行操作
另外,这里:使用HttpResponseRedirect的Django表单重定向
最后在这里:Django:HttpResponse vs HttpResponseRedirect vs render_to_response有什么区别
我仍然不完全了解如何使用HttpResponseRedirect。请帮忙。
在此先感谢任何回应。
这是防止用户在初始POST请求已在服务器端处理后重新提交表单的常见做法。
如果您在处理POST请求后不使用HttpResponseRedirect,那么后果可能是您无意中将多个重复的行插入数据库或多次发送确认电子邮件等。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句