Json解析django休息框架

问题描述 投票:1回答:2

我想在django views.py文件中解析传入的POST数据

发布数据:

{
"number" : "17386372",
"data" : ["banana","apple","grapes" ]  
}

以下是我尝试使用request读取上述传入数据的方法

views.朋友

class Fruits(APIView):

def post(self, request, format=None):

   if request.method == "POST":

        number = request.data.get('number')
        fruits_data = json.loads(request.body)

        if number not in [None, '', ' ']:
            try:

                response = {"return": "OK","data":fruits_data['data']}
                return Response(response)
            except:
                return Response({"return": "NOT OK"})
        else:
            return Response({"return": "NOT OK"})

    else:
        return Response({"return": "NOT OK"})

错误:

You cannot access body after reading from request's data stream
python arrays json django django-rest-framework
2个回答
3
投票

request.data和request.body是两种机制,它们以一种格式读取原始http请求并构造数据,适合在python环境中使用。这里的问题是你同时使用它们。因此,http连接的输入流已经通过request.data调用读取。现在request.body也尝试访问相同的流,现在不包含任何数据。因此,这是一个错误。

对你而言,我认为以下代码将起作用:

fruits_data = json.loads(request.body)
number = fruits_data["number"]

2
投票

Django json解析器已为您完成此操作:

from rest_framework import parsers

class Fruits(APIView):
    parser_classes = (parsers.JSONParser,)

    def post(self, request, format=None):
        number = request.data['number']
        fruits = request.data['data']

如果你的http请求的Content-Type已经正确设置为application/json,你甚至不需要指定解析器。

© www.soinside.com 2019 - 2024. All rights reserved.