发送 ajax 请求 django 时出现 400 错误

Posted

技术标签:

【中文标题】发送 ajax 请求 django 时出现 400 错误【英文标题】:I've got 400 error, when send ajax request django 【发布时间】:2016-01-06 09:12:44 【问题描述】:

想做基于 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】:

Django 的 csrf 保护要求 post 数据进行表单编码。您正在以 JSON 格式提交数据。

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

如果您必须提交 JSON,那么您需要使用 csrf_exempt 装饰器来停用 Django 的 CSRF 检查。我不建议这样做,因为它会使您的视图容易受到 CSRF 攻击。

【讨论】:

以上是关于发送 ajax 请求 django 时出现 400 错误的主要内容,如果未能解决你的问题,请参考以下文章

解决YII提交POST表单出现400错误,以及ajax post请求时出现400问题

SharePoint REST API。在 SharePoint 列表上进行 AJAX 调用时出现 400 错误请求

尝试从 ajax(Wordpress 插件)将 FormData 中的 Blob 发布到 php 时出现 400(错误请求)

在 wcf rest 中发送 xml 请求时出现错误请求 400

点击发送请求时出现 Cypress 400 XHR 错误

验证表单“发送的请求在语法上不正确”时出现错误 400