Django REST Framework изменяет класс переопределения на основе ответа

Я использую Django 2.2 и Django REST Framework.

у меня есть APIView который загрузит Zip-файл при успешном ответе.

class MultiDownloadCode(APIView):

    serializer_class = MultiDownloadSerializer
    permission_classes = (
        IsAuthenticated,
        CodeCanExport,
    )
    renderer_classes = (ZipRenderer,)

    def post(self, request):
        ...
        mime_type = 'application/zip'

        file_name = '{}.zip'.format(random_string(20))

        response = Response(data=in_memory_zip.read(), content_type=mime_type)
        response['Content-Disposition'] = 'attachment; filename=%s' % "-".join(file_name.split())

        return response

Я создал собственный класс Renderer ZipRenderer

class ZipRenderer(BaseRenderer):
    media_type = 'application/zip'
    format = 'zip'
    charset = 'utf-8'
    render_style = 'binary'

    def render(self, data, accepted_media_type=None, renderer_context=None):
        return data

Это нормально работает в случае успешного ответа. Но в случае исключения отказа в разрешении сообщения об ошибках также кодируются в двоичном коде и не отображаются надлежащим образом в формате JSON.

Когда я добавляю JSONRenderer к renderer_classes

renderer_classes = (ZipRenderer, JSONRenderer)

Это отлично работает в случае исключения, но затем дает ошибку в случае успешного ответа.

Как я могу изменить рендерер на основе ответа?

0 ответов

Другие вопросы по тегам