我想在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
request.data和request.body是两种机制,它们以一种格式读取原始http请求并构造数据,适合在python环境中使用。这里的问题是你同时使用它们。因此,http连接的输入流已经通过request.data调用读取。现在request.body也尝试访问相同的流,现在不包含任何数据。因此,这是一个错误。
对你而言,我认为以下代码将起作用:
fruits_data = json.loads(request.body)
number = fruits_data["number"]
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
,你甚至不需要指定解析器。