DRF: Как определить пользовательское сообщение об ошибке для исключения UnsupportedMediaType во время синтаксического анализа

#django #error-handling #django-rest-framework

#django #обработка ошибок #django-rest-framework

Вопрос:

Вопрос

Какой самый простой способ определить и вернуть пользовательское текстовое сообщение об ошибке, когда синтаксический анализатор Django Rest Framework выдает ошибку «Неподдерживаемый тип носителя»?

Некоторый контекст

У меня есть следующий APIView для обработки POST-вызова:

 class UploadView(APIView):
    parser_classes = [MultiPartParser, ]

    def post(self, request):
        # Question: Can this blob be simplied?
        if not request.content_type.startswith("multipart/form-data;"):
            msg = f"Expected content-type: multipart/form-data. But got: {request.content_type}"
            return Response(data=msg, status=status.HTTP_415_UNSUPPORTED_MEDIA_TYPE)

        serializer = ...
        ...
        return Response(status=status.HTTP_204_NO_CONTENT)
 

Как вы можете видеть, я проверяю тип содержимого, и, если не так, как ожидалось, я отвечаю сообщением 415 с указанием желаемого типа содержимого. Но этот подход кажется не совсем правильным. Я думаю, что обработка и пользовательское сообщение относятся к логике синтаксического анализатора. Есть ли лучший способ сделать это?

(Я знаю, что могу определять пользовательские сообщения об ошибках проверки сериализации в классах сериализаторов, используя error_messages свойство поля (документы здесь). Однако я не смог найти ничего подобного для синтаксического анализатора; кроме, вероятно, создания пользовательского синтаксического анализатора. Это действительно подходящий путь?)