【问题标题】:Django request.DATA gets corrupt valueDjango request.DATA 获得损坏的值
【发布时间】:2017-03-31 09:31:03
【问题描述】:

我的问题

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

文件.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 解决了它,但我知道这不是惯例。我已经尝试过转储、加载,但它不起作用,虽然我可以得到密钥并使用它,但我认为这不是一个好主意。

先谢谢你了¡

【问题讨论】:

  • 你知道你的 ajax 正在发送一个 json 字符串,对吧?
  • @RodXavier,是的,我尝试使用 JSON.stringify,但也没有这个,使用 parseJSON,使用 $.post,我得到了相同的 request.DATA。
  • 尝试使用 curl 或其他工具发布相同的 json,看看这个问题是在后端还是在前端

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


【解决方案1】:

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

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

请参阅DRF parsers docs

【讨论】:

    猜你喜欢
    • 2018-08-07
    • 2015-08-17
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多