gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:29:48 25 4
gpt4 key购买 nike

在 Django View 中,我正在尝试这个 -

@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)

在从 postman 发布数据时,我得到

JSON parse error - Expecting value: line 1 column 1 (char 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)

或者更好的是,使用基于类的 View ,它已经为您包含了所有这些功能:

from rest_framework import generics

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

这就是您所需要的。

关于python - Django REST 框架 JSONParser().parse(request) 引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58268806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com