Получение изображений разных размеров Django Rest Framework

Есть задача давать пользователю картинки с разными размерами в зависимости от группы. Есть 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/» не может быть показано, так как содержит ошибки.

Но как мне кажется я использую неправильный подход, и лучше использовать разные Url для разных размеров и ограничивать доступ определённым группам к этим url, но я не понимаю как это сделать.

model

from django.db import models


# Create your models here.

class Image(models.Model):
    title = models.CharField(max_length=255)
    image = models.ImageField(upload_to='media/pictures/')
    alt = models.CharField(max_length=255)
    added_at = models.DateTimeField(auto_now_add=True, editable=True)

    def __str__(self):
        return self.title

urls (приложения)

from django.urls import path
from .views import ImageAPIView

urlpatterns = [
    path('<int:pk>/', ImageAPIView.as_view())
]

urls (всего проекта)

from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include

from image_app import settings

urlpatterns = [
    path('admin/', admin.site.urls),
    path('auth/', include('rest_framework.urls')),
    path('api/', include('image_api.urls')),
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

views

import io

from django.shortcuts import render
from rest_framework import generics
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response

from sorl.thumbnail import get_thumbnail

from .custom_renderers import *
from .models import *
from .permissions import *


# Create your views here.

class ImageAPIView(generics.RetrieveAPIView):
    renderer_classes = [JPEGRenderer]

    # permission_classes = (BasicPermission,)

    def get(self, request, *args, **kwargs):
        group = request.user.groups.get()
        queryset = Image.objects.get(pk=self.kwargs['pk']).image
        print(type(queryset))
        if group.name == 'Basic':
            data = get_thumbnail(queryset, '200x200', crop='center', quality=99)
            return Response(data, content_type='image/jpg')
            # return Response(, content_type='image/jpg')
        elif group.name == 'Enterprise':
            data = queryset
            return Response(data, content_type='image/jpg')
        elif group.name == 'Premium':
            data = queryset
            return Response(data, content_type='image/jpg')

Плюс у меня кастомный renderer

renderer

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

Ответы (0 шт):