Json解析django rest框架
Posted
技术标签:
【中文标题】Json解析django rest框架【英文标题】:Json parsing django rest framework 【发布时间】:2017-03-19 17:51:07 【问题描述】:我想在 django views.py 文件中解析传入的POST
数据
发布数据:
"number" : "17386372",
"data" : ["banana","apple","grapes" ]
这是我尝试使用request
读取上述传入数据的方式
views.py
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
【问题讨论】:
选项1:首先json.loads
,然后提取'number'
。选项 2:from copy import deepcopy
和 my_copy = deepcopy(request)
在破坏原始对象之前。
【参考方案1】:
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
,您甚至不需要指定解析器。
【讨论】:
【参考方案2】:request.data 和 request.body 是两种机制,读取原始的http请求并以适合python环境使用的格式构造数据。这里的问题是您同时使用它们。因此,http 连接的输入流已经被 request.data 调用读取。现在 request.body 也尝试访问同一个流,它现在不包含任何数据。因此,它抛出了一个错误。
对你来说,我认为下面的代码会起作用:
fruits_data = json.loads(request.body)
number = fruits_data["number"]
【讨论】:
以上是关于Json解析django rest框架的主要内容,如果未能解决你的问题,请参考以下文章
django rest api:JSON 解析错误 - 无法解码 JSON 对象
python-django rest framework框架之解析器