Вернуть другой ответ типа контента при ошибке - PullRequest
0 голосов
/ 10 сентября 2018

Учитывая конечную точку с одним рендерером:

class PNGRenderer(BaseRenderer):
    media_type = 'image/png'
    format = 'png'

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

@renderer_classes((PNGRenderer, ))
def some_endpoint(request, format=None):
    filename = 'foo.png'
    if not os.path.exists(filename):
        raise NotFound("File not found")
    else:
        with open(filename, 'rb') as f:
            data = f.read()
            return response(data)

Я хотел бы вернуть application/json, если foo.png не найден. В реальной жизни filename не постоянно "foo.png", но динамично, очевидно.

Как я могу вернуть json так, чтобы Content-Type был правильно установлен в ответ application/json, даже если format = 'png' был предоставлен конечной точке.

1 Ответ

0 голосов
/ 10 сентября 2018

При написании вопроса я нашел ответ для смены рендерера: request.accepted_renderer = JSONRenderer().

В частности:

@renderer_classes((PNGRenderer, ))
def some_endpoint(request, format=None):
    filename = 'foo.png'
    if not os.path.exists(filename):
        request.accepted_renderer = JSONRenderer()
        raise NotFound("File not found")
    else:
        with open(filename, 'rb') as f:
            data = f.read()
            return response(data)

Я не уверен, что это правильный способ обработки исключений для бинарных Content-Type.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...