Django Model存储图像文件大小

时间:2013-12-05 17:35:38

标签: django django-models

我正在使用Django 1.6。我有一个上传图像文件的模型。

class Image(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255)
    url = models.ImageField(upload_to=get_image_path,
                             null=True,
                             blank=True,
                             height_field = 'height',
                             width_field = 'width',
                             verbose_name='Image')
    height = models.IntegerField(blank=True)
    width = models.IntegerField(blank=True)
    size = models.IntegerField(blank=True)
    format = models.CharField(max_length=50)
    caption = models.CharField(max_length=255)


    def clean(self):
        self.size = self.url.size

    class Meta:
        db_table = 'image'

如您所见,我在调用clean()方法时存储图像的大小。这适用于我想做的事情,但这是最佳做法吗?保存时是否有更好的方法自动保存图像的文件大小?

我的问题的第二部分是如何获取内容类型?

谢谢, 标记

2 个答案:

答案 0 :(得分:0)

Model.clean()应该用于验证 - 不要用它来更新/保存数据,而是用它来纠正任何无效数据(或抛出异常/错误信息)。

考虑到您可以从ImageField访问它,您可能想要考虑甚至不将图像的大小存储在数据库中 - 它消除了数据随着时间的推移而变得不一致的可能性。

我相信这question/answer应该解决你的第二个问题。

答案 1 :(得分:0)

对于第一个问题
this主题上查看Python Imaging Library PIL。

from PIL import Image
im=Image.open(filepath)
im.size # (width,height) tuple

对于第二个问题
HttpRequest.META,更具体地说是HttpRequest.META.get('CONTENT_TYPE') 来自this线程