数据验证失败时,当用户被重定向回表单时,如何保持表单(Python、Django)?

数据验证失败时,当用户被重定向回表单时,如何保持表单(Python、Django)?,django,forms,python-2.7,Django,Forms,Python 2.7,我知道这可能是一个重复的问题,但前一个问题是一个较老的问题,这些问题使用了一个表单实例,这对我没有什么帮助 验证失败后如何保存表单数据?我有多个下拉列表和输入字段,我不喜欢看到我的用户在后端验证失败时重新执行和键入所有操作。假设我有一个非常简单的表格: HTML: 我遇到的大多数例子都是使用form实例,它使用form.save()等。我选择了这个。如果用户提交的数据验证失败,是否有方法自动填充我的表单?谢谢 Django表单类是一个不错的选择。表单验证和呈现是构建它们的任务。我强烈建议使用它们

我知道这可能是一个重复的问题,但前一个问题是一个较老的问题,这些问题使用了一个表单实例,这对我没有什么帮助

验证失败后如何保存表单数据?我有多个下拉列表和输入字段,我不喜欢看到我的用户在后端验证失败时重新执行和键入所有操作。假设我有一个非常简单的表格:

HTML:


我遇到的大多数例子都是使用form实例,它使用form.save()等。我选择了这个。如果用户提交的数据验证失败,是否有方法自动填充我的表单?谢谢

Django表单类是一个不错的选择。表单验证和呈现是构建它们的任务。我强烈建议使用它们,因为在将用户输入传回浏览器时,它们也会考虑安全方面的问题(所有来自用户领域的输入都是有害的!)

如果确实需要在没有表单类的情况下实现这一点,则需要手动将表单值添加到呈现上下文中—这允许您在模板中使用它们

您的方法的主要问题是,如果出现验证错误,您希望重定向。重定向是对浏览器的响应,它告诉您:我没有东西给您,请转到这个位置。通常,浏览器不会将第一个请求中发送的数据也发布到第二个请求(这通常是一种良好的行为)。你可以通过回答状态码307而不是302来解决这个问题。有关更多信息,请阅读例如。或者,您可以使用get参数将表单数据编码到目标位置


再次强调:您应该有很好的理由不只是使用一个视图的django方法,该视图作用于GET和POST,并使用表单实例正确处理表单。

django表单类是一种方法。表单验证和呈现是构建它们的任务。我强烈建议使用它们,因为在将用户输入传回浏览器时,它们也会考虑安全方面的问题(所有来自用户领域的输入都是有害的!)

如果确实需要在没有表单类的情况下实现这一点,则需要手动将表单值添加到呈现上下文中—这允许您在模板中使用它们

您的方法的主要问题是,如果出现验证错误,您希望重定向。重定向是对浏览器的响应,它告诉您:我没有东西给您,请转到这个位置。通常,浏览器不会将第一个请求中发送的数据也发布到第二个请求(这通常是一种良好的行为)。你可以通过回答状态码307而不是302来解决这个问题。有关更多信息,请阅读例如。或者,您可以使用get参数将表单数据编码到目标位置

同样:您应该有很好的理由不只是使用一个视图的django方法,该视图作用于GET和POST,并使用表单实例正确处理表单

  <form class="" action="/register" method="post">
      <label for="">First Name</label>
      <input type="text" name="" value="">

      <label for="">Last Name</label>
      <input type="text" name="" value="">

      <label for="">Password</label>
      <input type="password" name="" value="">
    </form>
def register(self):

    .....
    if errors:
        for err in errors
            messages.errors(request, err)
            return redirect('/')
    else:
        messages.success(request, "Welcome User!")
        return redirect('/dashboard')