@yar075

Как отправлять изображения разного размера DRF?

Есть задача давать пользователю картинки с разными размерами в зависимости от группы. Есть 3 группы пользователей, не учитывая админа (Basic, Premium и Enterprise).

1-я может получить изображение только 200х200
2-я 200х200 или 400х400
3-я любое (200х200, 400х400 и оригинальное)

С простой передачей изображения проблем нету, всё работает, но как только я пытаюсь её изменить, получаю ошибку
Изображение «http://127.0.0.1:8000/api/1/» не может быть показано, так как содержит ошибки.


У меня есть кастомные рендеры которые использую
from rest_framework import renderers


class JPEGRenderer(renderers.BaseRenderer):
    media_type = 'image/jpeg'
    format = 'jpg'
    charset = None
    render_style = 'binary'

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


class PNGRenderer(renderers.BaseRenderer):
    media_type = 'image/png'
    format = 'png'
    charset = None
    render_style = 'binary'

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


И вот views.py
class ImageBaseView(APIView):
    renderer_classes = [JPEGRenderer]
    def get(self, request, *args, **kwargs):
        queryset = Image.objects.get(pk=self.kwargs['pk']).image
        print(queryset)
        return Response(queryset, content_type='image/jpg')


Но если пытаюсь так, то не работает
class ImageBaseView(APIView):
    renderer_classes = [JPEGRenderer]
    def get(self, request, *args, **kwargs):
        queryset = Image.objects.get(pk=self.kwargs['pk']).image
        print(queryset)
        data = get_thumbnail(queryset, '100x100', crop='center', quality=99)
        return Response(data, content_type='image/jpg')

Проблема как я понял в том что в первом случае я передаю в Response путь к изображению, а во втором экземпляр класса. И подход к отправке должен быть другим, но как это сделать не понимаю.
  • Вопрос задан
  • 140 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы