【问题标题】:csrf token value missing after form post表单发布后缺少 csrf 令牌值
【发布时间】:2015-12-18 16:06:18
【问题描述】:

我有一个张贴给自己的表格。 表单帖子第一次完美运行。但是表单在表单发布后加载,表单加载时缺少csrf值。

这是代码

def index(request):
    errormessage = None
    if request.method == 'POST':
        form = TestModelForm(request.POST)
        if form.is_valid():
            test_model = form.save(commit= False)
            #add some fields
            test_model.save()
            #some processing
        else:
            errormessage = "Please fix the errors and try again."
    else:
        form = TestModelForm()
    return render(request, 'index.html', {'errors': errormessage, 'form' : form})

使用以下语法插入 CSRF 令牌

{% csrf_token %}

这是第一页加载期间的 HTML

<input type="hidden" name="csrfmiddlewaretoken" value="mjezd6QwxpznO1WMDavAMRDA3e2pIhu7">

这是发布后页面加载的 HTML

<input type="hidden" name="csrfmiddlewaretoken" value="">

谁能告诉我可能是什么问题?

【问题讨论】:

  • 请贴一些代码。
  • 请提供一些代码。我猜你需要在帖子回复中返回表格。但是我不能确定没有看到你的视图和模板代码,对不起
  • 除了将数据发布到模型之外,我还要添加一些字段

标签: django


【解决方案1】:

尝试将return render(request, 'index.html', {'errors': errormessage}) 更改为return render(request, 'index.html', {'errors': errormessage, 'form': form}) 并将{% csrf_token %} 添加到您的模板文件中。这应该可以解决问题。更多信息请查看the docs here

【讨论】:

  • 表单已被传递给模板。抱歉,在此处发布代码时已将其删除。
  • 你的表格是这样的吗? &lt;form action="/your-name/" method="post"&gt; {% csrf_token %} {{ form }} &lt;input type="submit" value="Submit" /&gt; &lt;/form&gt;
  • 对于 csrf 也是一样的,我们为表单字段手动编码了 html
【解决方案2】:

你应该试试这个:

if form.is_valid():
    test_model = form.save(commit= False)
    #add some fields
    test_model.save()
    #some processing
    return render(request, 'index.html', {'errors': errormessage, 'form' : form})
else:
    errormessage = "Please fix the errors and try again."

【讨论】:

    猜你喜欢
    • 2013-12-02
    • 2017-12-19
    • 2019-07-28
    • 2017-07-27
    • 1970-01-01
    • 2020-02-10
    • 2017-01-08
    • 2019-06-01
    • 1970-01-01
    相关资源
    最近更新 更多