Django CSRF验证失败

时间:2013-12-29 21:13:43

标签: javascript python django

我在Django中实现一个按钮来解决用户问题(我正在为一个现有的项目做贡献,遗憾的是还没有使用现有的Django auth模型)

我有一个观点(现有):

def logout(request)
    request.session.flush()
    return render_to_response    ('tcore/logout.html',     
    context_instance=RequestContext(request))

和base.html中的按钮

<form action = 'logout/' method = 'post'>
{%csrf_token%}
<input class ='formGo' type  = 'submit' value='logout' style = 'float:none:'>
</form>

当我尝试使用该按钮时,我得到了Forbidden:403。CSRF验证失败。请求中止。

思想?

1 个答案:

答案 0 :(得分:0)

问题是您必须在RequestContext视图中使用logout 而不是,但在视图中使用base.html模板。

如果模板的上下文不包含csrf_token,则{% csrf_token %}模板标记不执行任何操作,而不是呈现隐藏的CSRF输入字段,这可能如下所示:

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

您可以使用RequestContext或手动生成CSRF令牌,并将其添加到模板的上下文中(如Django CSRF documentation中所述)。