从原始图像获取缩略图而无需手动输入缩略图 || Django 休息框架
getting thumbnail from original image without inputting that thumbnail image manually || Django Rest Framework
我在使用 Django REST Framework 的项目中发现了一个问题。在 'POST' 中,我将仅输入 1 个图像文件,但在 'GET' 中,我将获得该图像文件的文件路径,以及我将获得该图像调整大小版本的另一个文件路径.
在模型中,您会看到我们有两个图像字段。原始和缩略图。我们将仅在 original 字段中输入。但是缩略图 将由原始 字段中调整大小的图像自动填充。
型号:
class BookCover(models.Model):
id = models.UUIDField(primary_key=True, max_length=36, default=uuid.uuid4)
original = models.ImageField()
thumbnail = ResizedImageField()
序列化程序:
class BookCoverSerializer(serializers.ModelSerializer):
class Meta:
model = BookCover
fields = "__all__"
观看次数(用于创建):
def create(self, request,*args, **kwargs):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(
Msg.encode(201, "Saved Successfully", None, serializer.data)
, status=status.HTTP_201_CREATED
)
return Response(
Msg.encode(400, None, serializer.errors, None)
, status=status.HTTP_400_BAD_REQUEST
)
在这里,我们将输入原始图像,而不是缩略图。但在 table 中,我们将在缩略图字段中获得原始图像的调整大小版本。
我们该怎么做?
任何帮助将不胜感激。
首先,您应该确保序列化程序中的缩略图字段是 read_only,因为您明确希望它从 original
字段设置。
class BookCoverSerializer(serializers.ModelSerializer):
class Meta:
...
read_only_fields = ['thumbnail']
然后,您可以在序列化程序 .save()
方法中实现调整大小。作为示例(实现您自己的 resize_image
方法):
class BookCoverSerializer(serializers.ModelSerializer):
...
def save(self, **kwargs):
instance = super().save(**kwargs)
instance.thumbnail = resize_image(instance.original)
instance.save()
return instance
一种更简单的方法是使用类似 Django VersatileImageField
我在使用 Django REST Framework 的项目中发现了一个问题。在 'POST' 中,我将仅输入 1 个图像文件,但在 'GET' 中,我将获得该图像文件的文件路径,以及我将获得该图像调整大小版本的另一个文件路径.
在模型中,您会看到我们有两个图像字段。原始和缩略图。我们将仅在 original 字段中输入。但是缩略图 将由原始 字段中调整大小的图像自动填充。
型号:
class BookCover(models.Model):
id = models.UUIDField(primary_key=True, max_length=36, default=uuid.uuid4)
original = models.ImageField()
thumbnail = ResizedImageField()
序列化程序:
class BookCoverSerializer(serializers.ModelSerializer):
class Meta:
model = BookCover
fields = "__all__"
观看次数(用于创建):
def create(self, request,*args, **kwargs):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(
Msg.encode(201, "Saved Successfully", None, serializer.data)
, status=status.HTTP_201_CREATED
)
return Response(
Msg.encode(400, None, serializer.errors, None)
, status=status.HTTP_400_BAD_REQUEST
)
在这里,我们将输入原始图像,而不是缩略图。但在 table 中,我们将在缩略图字段中获得原始图像的调整大小版本。
我们该怎么做? 任何帮助将不胜感激。
首先,您应该确保序列化程序中的缩略图字段是 read_only,因为您明确希望它从 original
字段设置。
class BookCoverSerializer(serializers.ModelSerializer):
class Meta:
...
read_only_fields = ['thumbnail']
然后,您可以在序列化程序 .save()
方法中实现调整大小。作为示例(实现您自己的 resize_image
方法):
class BookCoverSerializer(serializers.ModelSerializer):
...
def save(self, **kwargs):
instance = super().save(**kwargs)
instance.thumbnail = resize_image(instance.original)
instance.save()
return instance
一种更简单的方法是使用类似 Django VersatileImageField