Django REST Framework POST请求JSON解析错误求助
问题分析与解决方案
核心问题
- 错误给创建接口添加GET方法:
/note/create/是创建资源的接口,仅需支持POST方法。添加GET方法后,访问DRF自带的API页面会触发GET请求,但视图里强制解析JSON,而GET请求没有JSON数据,直接导致解析错误。 - 手动解析JSON兼容性差:你用
JSONParser().parse(request)强制解析请求为JSON,但DRF API页面提交表单时发送的是application/x-www-form-urlencoded类型数据,而非JSON,因此解析失败;React发送的是标准JSON格式POST请求,所以能正常工作。 - HTTP方法名大小写错误:
deletenote视图的api_view里用了小写的Delete,DRF无法识别该方法,会导致删除请求失败。
具体修复步骤
1. 修正createnote视图
恢复为仅支持POST方法,移除手动JSON解析,改用DRF自带的request.data自动兼容JSON和表单数据:
@api_view(['POST']) def createnote(request): serializer = noteSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data) # 返回验证错误信息,方便调试 return Response(serializer.errors, status=400)
2. 修复deletenote视图的方法名
将小写Delete改为大写DELETE,确保DRF能正确识别:
@api_view(['DELETE']) def deletenote(request,pk): notes = note.objects.get(id=pk) notes.delete() return Response("Note deleted")
3. DRF API页面正常使用说明
修正后直接访问/note/create/,DRF会自动展示POST方法的提交表单,你可以直接在表单中输入body内容提交,无需额外添加GET方法。
内容的提问来源于stack exchange,提问作者Kishore MK
相关产品推荐
相关产品推荐

