在构建基于django的Web应用程序的过程中,遇到了一个错误,我无法解决该如何解决。在应用中,我的Angular2前端发送POST请求,其传递给后端的以下形式的JSON对象:Django Rest-Framework序列化程序:肯定存在的字段上抛出的KeyError
{
"variable": {
"name": "testVar"
}
}
在接收到该请求的节目的流程进到后功能,它在以下视图中定义,它从django rest-framework的APIView继承。
class VariableAPIView(APIView):
permission_classes = (AllowAny,)
renderer_classes = (VariableJSONRenderer,)
serializer_class = VariableNameSerializer
def post(self, request):
variable = request.data.get('variable', {})
serializer = self.serializer_class(data=variable)
serializer.is_valid(raise_exception=True)
return Response(serializer.data, status=status.HTTP_200_OK)
串行器的主要逻辑发生在这段代码中。
class VariableNameSerializer(serializers.Serializer):
name = serializers.CharField(max_length=255)
def validate(self, data):
name = data.get('name', None)
if name is None:
raise serializers.ValidationError('A variable name is required.')
try:
value = server.ReadVariable(name)
except Exception:
raise serializers.ValidationError('A variable with this name could not be found')
return {
'value': value,
}
当Django的服务器接收到一个请求,我得到以下异常:
KeyError: 'name'
During handling of the above exception, another exception occurred:
KeyError: "Got KeyError when attempting to get a value for field
name
on serializerVariableNameSerializer
. The serializer field might be named incorrectly and not match any attribute or key on thedict
instance. Original exception text was: 'name'."
据我了解,这我不知道是正确的,错误的意思是,它找不到名为'name'的字段,该字段会引发KeyError。然而,一个'名字'字段当然存在,就像你在我的代码中看到的那样。请注意,在这两个错误中,堆栈跟踪都没有包含我写的任何函数,我发现这些函数很奇怪,并且是初学者,我从来没有遇到过这样的事情。
你是对的,这工作。但是,如果我想让JSON拥有一个名为“value”的属性,而不是“name”,那么这是不可能的? –
编辑回复。 – Linovia