Python Django rest框架保存缩略图图像
我最近开始使用django+python进行开发,一切都进行得非常顺利,直到我遇到了一个问题,这个问题可能非常简单,但由于我对框架/语言缺乏经验,所以无法解决 我通过一个HTTP请求接收一个JSON对象,其中包含一些数据和两张图片。在这两张图片之前,我想保存其中一张图片的缩略图,但我看不出要完成这项任务。我可以保存所有的数据很容易,包括2个图像。但我无法找到一种方法来生成一种在DB中也有这种方法的方法,以及我想要的文件夹结构 我的文件夹应该如下所示:Python Django rest框架保存缩略图图像,python,django,rest,python-imaging-library,django-rest-framework,Python,Django,Rest,Python Imaging Library,Django Rest Framework,我最近开始使用django+python进行开发,一切都进行得非常顺利,直到我遇到了一个问题,这个问题可能非常简单,但由于我对框架/语言缺乏经验,所以无法解决 我通过一个HTTP请求接收一个JSON对象,其中包含一些数据和两张图片。在这两张图片之前,我想保存其中一张图片的缩略图,但我看不出要完成这项任务。我可以保存所有的数据很容易,包括2个图像。但我无法找到一种方法来生成一种在DB中也有这种方法的方法,以及我想要的文件夹结构 我的文件夹应该如下所示: pictures user
pictures
user
originals
processed
thumbnails
otherUser
originals
processed
thumbnails
我的目标是:接收2张图片,从其中一张创建缩略图,然后将所有3张图片保存在3个单独的文件夹中,并保存到数据库的路径
下面是我的模型代码的样子
class SomeData(models.Model):
owner = models.ForeignKey('auth.User', related_name='canopeo_data')
adjustments = models.CharField(max_length=10)
latitude = GeopositionField()
longitude = GeopositionField()
notes = models.TextField(null=True, blank=True)
original_image = models.ImageField(upload_to=original_image, max_length=255, blank=True)
processed_image = models.ImageField(null=False, upload_to=processed_image, max_length=255)
thumbnail_image = models.ImageField(null=False, upload_to=thumbnail_image, max_length=255)
date_time = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ('date_time',)
def save(self, *args, **kwargs):
super(SomeData, self).save(*args, **kwargs)
def original_image(self, filename):
url = "pictures/%s/originals/%s" % (self.owner.username, filename)
return url
def processed_image(self, filename):
url = "pictures/%s/processed/%s" % (self.owner.username, filename)
return url
def thumbnail_image(self, filename):
url = "pictures/%s/thumbnail/%s" % (self.owner.username, filename)
return url
序列化程序代码
class SomeDataSerializer(serializers.HyperlinkedModelSerializer):
#url = serializers.HyperlinkedRelatedField(view_name='data', format='html')
owner = serializers.Field(source='owner.username')
thumbnail_image = serializers.Field(source='original_image')
class Meta:
model = SomeData
fields = ('url', 'adjustments', 'latitude', 'longitude', 'notes', 'original_image', 'processed_image',)
查看代码
class SomeDataViewSet(viewsets.ModelViewSet):
queryset = SomeData.objects.all()
serializer_class = SomeDataSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
def pre_save(self, obj):
obj.owner = self.request.user
我已经尝试了很多方法,比如简单的缩略图、sorl\U缩略图,以及一些预先制作的方法。。但我无法找到一个具体的解决方案来满足我的需求
多谢各位 看起来您在定义
SomeDataSerializer
时有错误。在modelSomeData
字段中,原始图像定义为ImageField
,但在serialiser中,它只是字段,而不是。应使用正确的字段类型:
class SomeDataSerializer(serializers.HyperlinkedModelSerializer):
#url = serializers.HyperlinkedRelatedField(view_name='data', format='html')
owner = serializers.Field(source='owner.username')
thumbnail_image = serializers.ImageField(source='original_image')
...
非常感谢。我将保存缩略图方法放回原处,并修改了seralizer字段。没有正确保存缩略图!!