首先,我必须说,我在这里找到的所有解决方案都没有帮助我。
我的错误
详细信息:“CSRF失败:CSRF令牌丢失或不正确。”
我的反应表格
render: function(){
return(
<div className="col-lg-12 mrg">
<h3 className="ui dividing header">Add comment</h3>
<form method="POST" role="form" className="ui reply form" onSubmit={this.handleSubmit}>
<div className="field">
<textarea ref="text"></textarea>
</div>
<button className="ui blue labeled submit icon button" type="submit" value="SUBMIT" name="submit"><i className="icon edit"></i> Send</button>
</form>
</div>
);
}
我的ajax POST
$.ajax({
url: '/news/' + this.props.id,
dataType: 'json',
type: 'POST',
data: comment,
headers: {
HTTP_X_CSRFTOKEN: getCookie('csrftoken')
},
success: function(data) {
this.setState({data: data});
}.bind(this),
error: function(xhr, status, err) {
console.error('/news/' + this.props.id, status, err.toString());
}.bind(this)
});
我的标题
POST http://my.site/news/5 HTTP/1.1
Host: my.site
Proxy-Connection: keep-alive
Content-Length: 29
Origin: http://my.site
HTTP_X_CSRFTOKEN: GpCrHfeG7im7EObtiL6g56f5QvTJJRHZ
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
Referer: http://my.site/news/5
Accept-Encoding: gzip, deflate
你能不能给我一个建议,为什么我还有这个错误? 在前端框架中使用django表单的最佳实践是什么?
答案 0 :(得分:2)
您正在添加错误的标头。在您的$.ajax()
电话中,您应该这样做:
headers: {
'X-CSRFToken': getCookie('csrftoken')
},
有关详细信息,请查看“How can I add a custom HTTP header to ajax request with js or jQuery?”问题。