Django Rest Framework CSRF令牌失败

时间:2015-08-19 08:18:51

标签: jquery django-forms django-rest-framework django-csrf

首先,我必须说,我在这里找到的所有解决方案都没有帮助我。

我的错误

  

详细信息:“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表单的最佳实践是什么?

1 个答案:

答案 0 :(得分:2)

您正在添加错误的标头。在您的$.ajax()电话中,您应该这样做:

  headers: {
    'X-CSRFToken': getCookie('csrftoken')
  },

有关详细信息,请查看“How can I add a custom HTTP header to ajax request with js or jQuery?”问题。