浏览器中的HttpResponseRedirect和CreateView:后退按钮?

时间:2013-12-05 23:17:05

标签: django

HttpResponseRedirect是否阻止返回浏览器并再次提交表单? CreateView使用HttpResponseRedirect对吗? 如果是,那么我对我所拥有的东西感到困惑。 通过使用此视图和模板,我注意到我可以返回我的浏览器并一次又一次地提交表单......该字段的值仍然存在。

from .models import Person
class PersonCreateView(CreateView):
    model = Person
    fields = ['first_name']
    template_name = 'persons/create.html'
    success_url = '/'

模板:

{% extends "base.html" %}
{% block content %}
<form action="" method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Create" />
</form>
{% endblock %}

Django教程第4部分说:

# Always return an HttpResponseRedirect after successfully dealing
# with POST data. This prevents data from being posted twice if a
# user hits the Back button.

但在我的情况下我没有看到这种行为,有什么不同。

1 个答案:

答案 0 :(得分:0)

&#34; HttpResponseRedirect是否阻止重新访问浏览器并再次提交表单?&#34;

- &GT;这是一个很好用的。

您的问题是您忘记了表单模板中的{% csrf_token %},并且可能会出现错误。

此外,我不知道{{ form.as_p }}是否显示错误,请尝试进行循环:

{% for field in form.visible_fields %}
    {{ field }}
    {% if field.errors %}
        <ul>
            {% for error in field.errors %}
                <li>{{ error }}</li>
            {% endfor %}
        </ul>
    {% endif %}
{% endfor %}
{% for hidden in form.hidden_fields %}
    {{ hidden }}
{% endfor %}