Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django HttpResponseRedirect和CreateView:浏览器中的后退按钮?_Django - Fatal编程技术网

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

Django HttpResponseRedirect和CreateView:浏览器中的后退按钮?,django,Django,HttpResponseRedirect是否阻止返回浏览器并再次提交表单? CreateView使用HttpResponseRedirect,对吗? 如果是的话,那么我对我所拥有的感到困惑。 通过使用此视图和模板,我注意到我可以返回浏览器并一次又一次地提交表单。。。字段的值仍然存在 from .models import Person class PersonCreateView(CreateView): model = Person fields = ['first_name'

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 %}
但在我的例子中,我看不到这种行为,有什么不同。

“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 %}