Django REST框架JSONParser()。parse(request)引发错误 [英] Django REST framework JSONParser().parse(request) raising error

查看:800
本文介绍了Django REST框架JSONParser()。parse(request)引发错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

In Django view, I am trying this-

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

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

On posting data from postman,I get


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

JSON parse error - Expecting value: line 1 column 1 (char 0)


推荐答案

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

The problem is that you are passing the entire request object to the JSON parser, instead of the body that contains the actual JSON content.

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

But you shouldn't do this yourself anyway. Let DRF do it for you.

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)

甚至更好的是,使用基于类的视图,该视图实际上已经为您提供了所有这些功能:

Or even better, use a class-based view which literally includes all this functionality for you already:

from rest_framework import generics

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

这就是您所需要的。

这篇关于Django REST框架JSONParser()。parse(request)引发错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆