在 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
这就是您所需要的。