如何解决表单重新提交?

时间:2015-09-29 12:34:43

标签: django django-forms

当页面刷新发布请求时,表单重新提交。 我在发布请求后尝试重定向。但是,当请求有上下文时,它不起作用。这个上下文有form.errors,因为login.html显示表单错误。 如何解决这个问题? (没有消息框架)

def do_login(request):
  if request.method == 'POST':
    form = LoginForm(request.POST)
    if form.is_valid():
      email = form.cleaned_data['email']
      password = form.cleaned_data['password']
      user = authenticate(email=email, password=password)
      if user is not None:
        login(request, user)
        return redirect(reverse('root'))
    else:
      pass
      # redirect cannot pass context, right?
  else:
    form = LoginForm()
context = {
    'form': form
}
return render(request, 'accounts/login.html', context=context)

1 个答案:

答案 0 :(得分:2)

您的代码使用的是标准方法。您是在成功发布请求后重定向,但不是在不成功的帖子后重定向。这样可以使表单显示错误。

如果用户在发布不成功后刷新,则浏览器通常会警告用户他们的数据将被重新提交。如果他们确实重新提交,那么这并不重要,登录将再次失败,他们将看到与以前相同的错误。