Django休息框架保存缩略图图像

时间:2014-09-18 04:16:07

标签: python django rest python-imaging-library django-rest-framework

我最近开始使用django + python进行开发,一切都非常顺利,直到我陷入一个可能非常简单的问题,但我无法解决我对框架/语言的经验不足。

我通过HTTP请求接收JSON对象,其中包含一些数据和2张图片。在这2张照片之前,我想从其中一张照片中保存一个缩略图,但是我还没有看到完成这项任务。我可以轻松保存所有数据,包括2张图像。但我无法找到一种方法来生成一种在数据库中也有这种方式的方法,以及我想要的文件夹结构。

我的文件夹应如下所示:

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

Serializer code ...

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

我已尝试过很多东西,比如easy_thumbnails,sorl_thumbnail,以及一些预制的方法,但是我无法找到针对我所做的事情的解决方案。想。

非常感谢!

1 个答案:

答案 0 :(得分:1)

看起来你对SomeDataSerializer的定义有误。在模型SomeData字段original_image中定义为ImageField,但在序列化程序中,它只是Field,而不是ImageField。您应该使用正确的字段类型:

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')
    ...