从jquery到Django进行ajax调用时没有设置CSRF

时间:2017-02-14 10:14:00

标签: javascript jquery python ajax django

我在从jquery到django views.index进行ajax调用时没有设置CSRF cookie(我已经尝试了其他stackoverflow帖子上看到的所有内容,请参阅帖子底部的列表)

我的ajax电话:

board.delete_comment = function(){

$(this).closest("div").slideUp()
$.ajax("http://localhost:8000/"+$(this).val(),{
    type: "POST",
    beforeSend: function(xhr, settings) {
        var csrftoken = getCookie('csrftoken')
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
    }
    },
    success: function (data) {
        console.log(data)
    }
});
};

我的views.index功能:

@csrf_exempt
def delete_me(comment_id):
    comment = get_object_or_404(Comment, pk=comment_id)
    comment.delete()
    return "success"

我的网址格式:

url(r'^(?P<comment_id>[0-9]+)/$', views.delete_me, name='delete'),

在javascript中调用delete_comment函数时,会触发403禁止错误。我已经尝试了在现有堆栈溢出板上看到的所有内容:

-installing and adding corsheaders to settings
-including a @csrfexempt decorator in views.index
-setting CSRF_COOKIE_SECURE to false in settings
-adding the csrftoken header to the request (per django documentation)
-setting a CSRF_TOKEN on the window in my html

似乎没有任何作用......任何人都有关于如何解决此问题的建议?或者问题是什么。

1 个答案:

答案 0 :(得分:1)

您可能遇到跨域问题,因为您在ajax调用中对http://localhost:8000/进行了硬编码。这可能是请求被拒绝的原因。尝试替换&#39; http://localhost:8000/&#39;用&#39; /&#39;如果这是您要定位的网址。