Django HttpResponseRedirect和CreateView:浏览器中的后退按钮?
HttpResponseRedirect是否阻止返回浏览器并再次提交表单? CreateView使用HttpResponseRedirect,对吗? 如果是的话,那么我对我所拥有的感到困惑。 通过使用此视图和模板,我注意到我可以返回浏览器并一次又一次地提交表单。。。字段的值仍然存在Django HttpResponseRedirect和CreateView:浏览器中的后退按钮?,django,Django,HttpResponseRedirect是否阻止返回浏览器并再次提交表单? CreateView使用HttpResponseRedirect,对吗? 如果是的话,那么我对我所拥有的感到困惑。 通过使用此视图和模板,我注意到我可以返回浏览器并一次又一次地提交表单。。。字段的值仍然存在 from .models import Person class PersonCreateView(CreateView): model = Person fields = ['first_name'
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 %}
但在我的例子中,我看不到这种行为,有什么不同。“HttpResponseRedirect是否阻止返回浏览器并再次提交表单?”
->这是它的一个很好的用途
您的问题是您忘记了表单模板中的{%csrf\u 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 %}
{%for form.visible\u fields%}
{{field}}
{%if field.errors%}
{%字段中有错误。错误%}
- {{error}}
{%endfor%}
{%endif%}
{%endfor%}
{%用于隐藏在表单中。隐藏的_字段%}
{{隐藏}}
{%endfor%}
是的,浏览器就是这样工作的。不幸的是,双重提交仍然不是django的核心。在没有唯一值约束的“创建”表单上,尝试双击“提交”按钮。一种解决方案是在GET期间为表单生成一个唯一的令牌,检查ihasn之前是否提交过,并在保存后将其存储在任何位置(例如用户会话)。哦,好的,因为在这篇文章中:,似乎HTTPRedirect和Django CSRF将完成这项工作。
{% 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 %}