如果您检查了模板,auth.login
您会注意到 CSRF 令牌明确包含在<form>
标签内。
<form method="post" action=".">
{% csrf_token %}
GET
当根据请求呈现页面时,这将扩展为隐藏字段。就像是:
<form method="post" action=".">
<div style='display:none'>
<input type='hidden' name='csrfmiddlewaretoken'
value='90064bf0e86edacfdb60595e3e2b8f23' />
</div>
然后将此令牌传递回视图并进行POST
验证。
因此,在您POST
访问受 CSRF 保护的视图之前,您必须首先从所述视图中获取令牌。
POST
在向视图发出请求之前,您能否验证/确保您手边有 CSRF 令牌?csrf_exempt
或者,您可以使用装饰器禁用视图的 CSRF 保护。不过,这可能不是一个好主意。
更新
这就是我的问题的重点:我的前端没有使用 django 模板,因此我不能用令牌标记表单。我正在为我的前端使用 GWT,它正在为帖子呈现表单。
在呈现页面之前,您是否已经GET
向 Django 视图发出请求?在这种情况下,您可以通过解析响应的内容来获取 CSRF 令牌。
如果不是,您将必须显式地GET
向视图发出请求(假设它支持GET
)并解析 CSRF 令牌的响应。例如,请参阅此问题。