在Django视图中无法通过PUT Ajax请求接收数据值

时间:2019-11-16 16:07:23

标签: django ajax put

我正在执行PUT Ajax请求,该请求发送data参数中的值,但是在django视图中没有收到任何数据。

这是我的代码:

function wordUpdate(){
    $.ajax({
        url:'/socialanalyzer/dictionary_update/',
        headers: { "X-CSRFToken": $.cookie("csrftoken") },
        type: 'PUT',
        data: {
                word_id: temporalWordToEdit
        },success: function(data) {
              if (data.code==200) {
                alertify.success('Word modified successfully');
                var delayInMilliseconds = 2000;
                setTimeout(function() {
                  location.reload(true);
                }, delayInMilliseconds);
              }else{
                console.log('Error, status:',data.code);
                alertify.error('Error updating the word');
              }
            }
        })
}

views.py

def put(self, request, *args, **kwargs):
    try:
        if request.method == 'PUT' and request.is_ajax():
        import pdb;pdb.set_trace()

我正确传递了这个消息吗?这应该可以,但是我收到的数据为空:

(Pdb) request.GET
<QueryDict: {}>

我也尝试使用JSON.stringify函数发送数据,但得到的结果相同:

    var word_id = { 'word_id': temporalWordToEdit };
    $.ajax({
        url:'/socialanalyzer/dictionary_update/',
        headers: { "X-CSRFToken": $.cookie("csrftoken") },
        type: 'PUT',
        data: JSON.stringify(word_id)

我收到了值,但是没有像发送数据那样而是直接在url中发送它,就像这样:

        url:'/socialanalyzer/dictionary_update/?word_id='+temporalWordToEdit,
(Pdb) request.GET
<QueryDict: {'word_id': ['1']}>

我不知道这是正确的方法还是做错了什么。我了解在PUT请求中,您尝试更新实例,但是在URL中而不是在data参数中发送id实例是正确的吗?

在此先感谢您,

1 个答案:

答案 0 :(得分:0)

我找到了自己问题的答案。根据这个thread,在PUT Ajax请求中,参数是作为正文而不是作为查询字符串发送的,因此在Django中,我会像这样获得这些值:request.body