将jQuery POST发送到Django视图

时间:2013-04-15 07:55:32

标签: jquery python ajax django csrf

我通过$.ajax()从HTTP上的页面向Django视图发送POST请求 - 我使用了提供here的CSRF的AJAX代码段。我可以在Firebug中将csrftoken cookie视为Secure;我想这就是POST请求的X-Csrftoken标头以null的形式发送的原因。

有什么办法可以实际访问这个cookie的价值吗?我目前正在绕过403错误(因为POST与空CSRF令牌标头一起发送),方法是将@csrf_exempt添加到我的视图中 - 但是希望有适当的CSRF方法。

更新CLARITY:通过表单提交此数据。我只是在页面上加载javascript文件(包含AJAX调用)时发送POST。

1 个答案:

答案 0 :(得分:3)

我为获得正确的csrf解决方案而采取的措施是:

将我的{% csrf_token %}包含在一个有意义的地方。

var csrfToken = $('input[name="csrfmiddlewaretoken"]').val();
$.ajax({
    url: $form.attr('action'),
    type: 'POST',
    data: postData,
    csrfmiddlewaretoken: csrfToken,
    dataType: 'json',
    success: function(data) { }
});

我一直在努力让这个工作:

var csrftoken = $.cookie('csrftoken');
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        xhr.setRequestHeader("X-CSRFToken", csrftoken);
    }
});

但到目前为止,第一个解决方案已被证明是最有效的解决方案。