当发送ajax请求django时,我有400错误

时间:2015-10-08 16:16:46

标签: jquery ajax django

想要进行基于Ajax的授权。 列表:

 <script type="text/javascript">
    $('#activeform').on('submit', function(event){
        event.preventDefault();
        var _self = $(this);
        var token = $('input[name="csrfmiddlewaretoken"]').val(); 
        $.ajax({
            type: _self.attr('method'),
            url: _self.attr('action'),
            data: JSON.stringify({
                 "username": $('#id_username').val(),
                 "password1": $('#id_password1').val(),
                 "password2":  $('#id_password2').val(),
                 "csrfmiddlewaretoken": token}), 
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(json) {
                    alert("Success")},
            error: function( xhr, textStatus ) {
                alert( [ xhr.status, textStatus ] )},
            complete: function() {
                    alert("Msg sended")},
            crossDomain: false
            });
});  </script>

得到403错误,成功消息。如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

Django的csrf保护期望帖子数据采用表格编码。您将数据提交为JSON。

您可以通过更改javascript来提交表单编码数据来解决问题。

如果您必须提交JSON,那么您需要使用https://msdn.microsoft.com/en-us/library/xwewhkd1(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1装饰器来停用Django的CSRF检查。我不建议这样做,因为它会使您的观点容易受到CSRF攻击。