我是Django和Django REST Framework的新手。我有以下序列化器类,我正在使用它来上传文件以及其他信息。但是,当我运行带有上传文件的API端点时,结果如下:
HTTP 415 Unsupported Media Type
Allow: POST, OPTIONS
Content-Type: application/json
Vary: Accept
{
"detail": "Unsupported media type \"multipart/form-data; boundary=----WebKitFormBoundaryybZ07gjZAqvcsZw3\" in request."
}
我很努力地在Google上解决这个问题,但是无法找到解决方案,所以这里是我的序列化器和API视图。
序列化器:
class ExampleSerializer(serializers.Serializer):
example_id = serializers.IntegerField()
description = serializers.CharField(allow_blank=True)
example_file = serializers.FileField(allow_empty_file=True)
def create_requirement_line(self):
request = self.context['request']
requirement_line = ExampleService().example_method(
example_id=self.validated_data['example_id'],
description=self.validated_data['description'],
example_file=self.validated_data['example_file']
)
return requirement_line
视图:
class RequirementLineAPIView(BaseCreateAPIView):
serializer_class = ExampleSerializer
parser_classes = (FormParser,)
def post(self, request, format=None,*args, **kwargs):
serializer = self.get_serializer(data=request.data)
if serializer.is_valid():
try:
example_variable = serializer.example_method()
return Response(example_variable, status=status.HTTP_200_OK)
except ValidationError as e:
return Response(e.message, status=status.HTTP_400_BAD_REQUEST)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
parser_classes = (FormParser,)
这行中,逗号的作用是什么? - kpieparser_classes = (FormParser,)
这一行中,逗号使其成为一个可迭代的变量,即一个Python元组。而DRF似乎需要它以这种方式存在。如果没有逗号,parser_classes
变量将接收一个type
值:即FormParser
类。这将是一个等价的表达式:parser_classes = FormParser
。为了更简单地理解,请在Python shell中尝试以下命令:x = 5 type(x) x = (5) type(x) x = (5,) type(x) x = 5, type(x)
你得到了什么? - rodolfojcj