【发布时间】:2020-01-04 06:59:17
【问题描述】:
我将发布请求发送到 OrganisationApiView 类。请求正文包含以下 JSON。
{
"organisation_id" : "1",
"organisation_name" "Some Name"
}
views.py
from typing import Optional, Any
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from rest_framework.parsers import JSONParser
from . import serializers
class OrganisationApiView(APIView):
serializers_class = serializers.OrganisationSerializer
parser_classes = [JSONParser]
def get(self, request, formate=None):
return Response({"message": "You are Cool!!"})
def post(self, request, formate=None):
serializer = self.serializers_class(data=request.data)
print(serializer)
if serializer.is_valid():
organisation_name = serializer.validated_data.get('organisation_name')
message = f"Reached POST {organisation_name}"
return Response({'message': message, status: 'HTTP_200_OK'})
else:
return Response(
serializer.errors,
status=status.HTTP_400_BAD_REQUEST
)
def put(self, request, pk=None):
return Response({"message": "PUT"})
def patch(self, request, pk=None):
return Response({"message": "PATCH"})
def delete(self, request, pk=None):
return Response({"message": "Delete"})
我收到邮递员的回复为 -
TypeError at /api/organisation/
keys must be str, int, float, bool or None, not module
Request Method: POST
Request URL: http://127.0.0.1:8000/api/organisation/
Django Version: 2.1.15
Exception Type: TypeError
Exception Value:
keys must be str, int, float, bool or None, not module
Exception Location: /usr/local/lib/python3.7/json/encoder.py in iterencode, line 257
Python Executable: /usr/local/bin/python
Python Version: 3.7.6
Python Path:
['/app',
'/usr/local/lib/python37.zip',
'/usr/local/lib/python3.7',
'/usr/local/lib/python3.7/lib-dynload',
'/usr/local/lib/python3.7/site-packages']
Server time: Sat, 4 Jan 2020 06:42:54 +0000
GET、PUT、PATCH、DELETE 等其他请求运行良好。我不明白究竟是什么导致了这个问题。我还定义了 SimpleSerializers,如下所述。
from rest_framework import serializers
class OrganisationSerializer(serializers.Serializer):
organisation_id = serializers.IntegerField()
organisation_name = serializers.CharField(max_length=255, allow_null=False, allow_blank=False)
另外,我不想在模型中接受 organisation_id,因为我已将其定义为主键。 但是当我发送没有 organisation_id 的 JSON 时,它会引发一个错误,指出字段 organisation_id 是必需的。到目前为止,我只想接受 organisation_name 并将其作为响应返回。
【问题讨论】:
标签: python-3.x django-rest-framework