“detail”:post 方法中的“JSON 解析错误 - 期望值:第 1 行第 1 列(字符 0)”

问题描述 投票:0回答:1

(https://i.stack.imgur.com/4OABY.png)

views.py

from django.shortcuts import render
from rest_framework.response import Response
from rest_framework.parsers import JSONParser
from rest_framework.decorators import api_view
from .models import note
from .serializers import noteSerializer


@api_view(['GET'])
def getroute(request):

    routes = [
       { 'Endpoint':'/note/',
        'method':'GET',
        'body':None,
        'description':'Returns an array of notes'},
         { 'Endpoint':'/note/id',
        'method':'GET',
        'body':None,
        'description':'Returns an single note object'},
        { 'Endpoint':'/note/create/',
        'method':'POST',
        'body':{'body':""},
        'description':'creates a single note object'},
        { 'Endpoint':'/note/id/update',
        'method':'PUT',
        'body':{'body':""},
        'description':'updates a single note object'},
        { 'Endpoint':'/note/id/delete',
        'method':'DELETE',
        'body':None,
        'description':'deletes a single note object'}
    ]
    return Response(routes)


@api_view(['POST'])
def createnote(request):
    print("request.data")
    data = JSONParser().parse(request)
    serializer = noteSerializer(data=data)

    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data)

@api_view(['GET'])
def getNotes(request):
    notes = note.objects.all().order_by('-updated')
    serializer = noteSerializer(notes,many=True)
    return Response(serializer.data)
    


@api_view(['GET'])
def getNote(request,pk):
    notes = note.objects.get(id=pk)
    serializer = noteSerializer(notes,many=False)
    return Response(serializer.data)

@api_view(['PUT'])
def updatenote(request,pk):
    data =request.data
    notes =note.objects.get(id=pk)
    serializer = noteSerializer(instance=notes,data=data)
    if serializer.is_valid():
        serializer.save()
    return Response(serializer.data)

@api_view(['Delete'])
def deletenote(request,pk):
    notes = note.objects.get(id=pk)
    notes.delete()
    return Response("Note deleted")

模型.py

from django.db import models

class note(models.Model):
    body = models.TextField(null=True,blank=True)
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

序列化器.py

from rest_framework.serializers import ModelSerializer
from .models import note

class noteSerializer(ModelSerializer):
    class Meta:
        model = note
        fields = '__all__'

首先我使用了 api/todo/create url,它向我显示了“详细信息”:“不允许使用方法“GET”。”我在 create 的 apiview 中添加了 get 方法,然后尝试通过 djangorest api 页面发布待办事项内容,并显示“detail”: “JSON parse error - Expecting value: line 1 column 1 (char 0)”,但是如果我尝试用 React 做同样的事情,post 方法有效。

reactjs django django-rest-framework django-views
1个回答
0
投票

JSONParser()
。但是,Django Rest Framework 会自动将请求数据解析为字典,因此您无需手动解析。您可以直接从
request.data
访问数据。删除线
data =
JSONParser().parse(request)
应该可以解决此问题。

@api_view(['POST'])
def createnote(request):
    if request.method == 'POST':
        serializer = noteSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
© www.soinside.com 2019 - 2024. All rights reserved.