Django CSRF错误是通过以多页形式访问页面来修复的吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django CSRF错误是通过以多页形式访问页面来修复的吗?相关的知识,希望对你有一定的参考价值。
我在两个页面上有两个表单,一个表示另一个表单。如果在第1页上按下“提交”,则应该将您带到第2页的表单。第2页失败,“CSRF验证失败。请求已中止。”原因是“未设置CSRF cookie”。
奇怪的是,如果我直接进入第2页,它会很好地加载。如果我刷新页面并重新提交表单,我会再次获得403,但是,例如,如果我进入地址栏并点击“Enter”重新访问该页面,则会加载而不会出现错误。是什么赋予了?
我使用的是最新版本的Django,我在所有视图中使用了渲染,在所有表单标签中都使用了{%csrf_token%}。
为什么重新访问该页面会修复403错误?表单之间不会发生登录或身份验证。事实上,我甚至没有对第1页(尚未)提交的数据做任何事情。
相关代码如下:
第1页模板:
<div class="">
<div class="">
<h1>Page 1</h1>
<p>What's up?</p>
<form action="{% url 'core:getPageTwo' %}" method="post">
{% csrf_token %}
{{ form }}
<input class="yellow_button" type="submit" value="Submit">
</form>
</div>
</div>
第2页查看:
def getPageTwo(request):
form = SomeForm()
context = {'form' : form}
return render (request, 'core/page_two.html', context)
第2页模板:
<div class="">
<div class="">
<h1>Page 2</h1>
<form action="#" method="post">
{% csrf_token %}
{{ form }}
</form>
</div>
</div>
找到了。我的HTTPS搞砸了。所以我有CSRF_COOKIE_SECURE = TRUE的事实搞乱了发送cookie的所有尝试。
除了你的答案@thrillhouse:
CSRF_COOKIE_SECURE=True
使csrf令牌仅适用于ssl,就像文档也说:
是否为CSRF cookie使用安全cookie。如果将其设置为True,则cookie将被标记为“安全”,这意味着浏览器可以确保cookie仅通过HTTPS连接发送。
所以当你切换回HTTPS
连接时,你应该将值转回True
。
以上是关于Django CSRF错误是通过以多页形式访问页面来修复的吗?的主要内容,如果未能解决你的问题,请参考以下文章
我无法使用有效的用户名和密码登录 Django 管理页面,它返回 % csrf_token % 禁止的 404 错误消息