Django REST 框架 JSONParser().parse(request) 引发错误



在 Django 视图中,我正在尝试这个-

@csrf_exempt
def customer_list(request):
"""
List all customers, or create a new customer.
"""
if request.method == 'GET':
snippets = Customer.objects.all()
serializer = CustomerSerializer(snippets, many=True)
return JsonResponse(serializer.data, safe=False)
elif request.method == 'POST':
data = JSONParser().parse(request)
serializer = CustomerSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)

在从邮递员发布数据时,我得到

JSON 解析错误 - 预期值:第 1 行第 1 列(字符 0(

问题是您将整个请求对象传递给 JSON 解析器,而不是包含实际 JSON 内容的正文。

但无论如何你不应该自己这样做。让 DRF 为您完成。

from rest_framework.decorators import api_view
from rest_framework.response import Response
@api_view()
def customer_list(request):
"""
List all customers, or create a new customer.
"""
if request.method == 'GET':
snippets = Customer.objects.all()
serializer = CustomerSerializer(snippets, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = CustomerSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=201)
return Response(serializer.errors, status=400)

或者更好的是,使用基于类的视图,该视图实际上已经为您包含了所有这些功能:

from rest_framework import generics
class CustomerList(generics.ListCreateAPIView):
model = Customer
serializer_class = CustomerSerializer

这就是您所需要的。

相关内容

最新更新