我有一个基于django的网站,带有用户资料系统,用户可以在其中添加注释。我正在尝试通过REST框架实现CRUD。我遵循了本教程:
https://dev.to/nobleobioma/build-a-crud-django-rest-api-46kc
我修改了代码。我有一个名为Note的模型,这是该模型的代码:
class Note(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="notes")
type = models.IntegerField(choices=NOTE_TYPE, default=0)
updated_on = models.DateTimeField(auto_now=True)
content = models.TextField()
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ["-created_on"]
视图类如下:
@api_view(["POST"])
@permission_classes([IsAuthenticated])
@csrf_exempt
def add_note(request):
payload = json.loads(request.body)
user = request.user.id
note = Note.objects.create(
type=payload["type"],
content=payload["content"],
author=user,
)
serializer = NoteSerializer(note)
return JsonResponse({'notes': serializer.data}, safe=False, status=status.HTTP_201_CREATED)
运行服务器时,所有其他URL均可工作,但链接到此类的URL给我以下错误:
从None提高JSONDecodeError(“期望值”,s,err.value) json.decoder.JSONDecodeError:期望值:第1行第1列(字符0)
该错误似乎是由以下行引起的:
payload = json.loads(request.body)
我已经针对类似的错误尝试了许多解决方案,但似乎无济于事。
这是序列化器:
class NoteSerializer(serializers.ModelSerializer):
class Meta:
model = Note
fields = ['type', 'content']
答案 0 :(得分:1)
更新您的视图(当您使用基于函数的视图时),让django rest框架来处理数据的序列化和反序列化。
@api_view(["POST"])
@permission_classes([IsAuthenticated])
@csrf_exempt
def add_note(request):
data = request.data
user_id = request.user.id
user = User.objects.get(id=user_id)
serializer = NoteSerializer(data=data)
if serializer.is_valid():
serializer.save(author=user)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
现在尝试,您将获得所需的输出。