Django REST Framework GET正常POST返回JSON解析错误如何解决
问题根因
- 代码逻辑错误:你使用了DRF的
@api_view装饰器,这个装饰器会自动完成请求解析逻辑,直接把解析好的数据放到request.data属性中,同时会消耗掉原始请求的body流。你在POST逻辑里又调用了JSONParser().parse(request)去二次读取请求流,此时流已经是空的,自然解析不出JSON内容,就会抛出你遇到的报错。 - 次要的请求端问题:如果你发起POST请求时没有设置
Content-Type: application/json请求头,或者请求体根本没有携带合法的JSON数据,也会触发这个报错。
修复方案
- 首先修改
snippet_list视图的POST逻辑,删掉手动调用JSONParser的代码,直接用request.data即可,和你已写的PUT请求逻辑保持一致就好:
elif request.method == 'POST': print("the request",request.data) # 删除下面这行冗余代码 # data = JSONParser().parse(request) # 直接用request.data传给序列化器 serializer = SnippetSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
- 其次发起POST请求时需要确认:
- 请求头携带
Content-Type: application/json - 请求体是合法的JSON格式,不能为空
- 请求头携带
内容的提问来源于stack exchange,提问作者qua
相关产品推荐
相关产品推荐

