Django request.DATA获取损坏的值

时间:2016-11-17 00:26:19

标签: javascript python json django django-rest-framework

我的问题

我的问题是,当通过帖子将json文档发送到休息框架api时,文档会转换一个键并添加一个空值。

file.js

function SaveFiles(task_id) {
     data = {'taskid': task_id,'file_list': file_list};
     $.ajax({
        url: '/tarjet/save.../',
        type: 'POST',
        data: JSON.stringify(data),
        async:false,
        success:function(data){

        },
        complete:function(){},
        error:function (xhr, textStatus, thrownError){

        }
    });

}

api.py

class SaveTaskFiles(APIView):
    authentication_classes = (TokenAuthentication,)

    def post(self, request):
        a = request.DATA

javascript输出

{"taskid":"1198792","file_list":[{"id":0,"file_name":"image2.png","upload_date":"11/16/2016","file_description":"","download_link":"a6175ab4-ac58-11e6-8e10-00dbdfd54837.png","isdeactivate":"0","sft_f":"svt"}]}

实际输入请求.DATA

{u'{"taskid":"1198792","file_list":[{"id":0,"file_name":"image2.png","upload_date":"11/16/2016","file_description":"","download_link":"a6175ab4-ac58-11e6-8e10-00dbdfd54837.png","isdeactivate":"0","sft_f":"svt"}]}': [u'']} 

是Querydict类型。

我无法解释为什么我的json文件成为一个键,这个值是一个空列表,我已经使用request.body解决了它,但我知道这不是惯例。我已经尝试过转储,加载,但它没有用,虽然我可以得到密钥并使用它,但我认为这不是一个好主意。

事先非常感谢你¡

1 个答案:

答案 0 :(得分:1)

您需要发送正确的内容类型标头,告诉DRF您正在发送JSON文档,而不是普通字符串。

 $.ajax({
      contentType: 'application/json',
      ...
 });

请参阅DRF parsers docs