【问题标题】:Django Model store image file sizeDjango 模型存储图像文件大小
【发布时间】:2013-12-05 17:35:38
【问题描述】:

我正在使用 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() 方法时,我正在存储图像的大小。这适用于我想做的事情,但这是最佳做法吗?保存时有没有更好的方法来自动保存图片的文件大小?

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

谢谢, 标记

【问题讨论】:

    标签: django django-models


    【解决方案1】:

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

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

    我相信question/answer 应该可以解决您的第二个问题。

    【讨论】:

      【解决方案2】:

      第一个问题
      查看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线程

      【讨论】:

        猜你喜欢
        • 2016-01-19
        • 1970-01-01
        • 2012-08-21
        • 2013-01-22
        • 2021-05-23
        • 1970-01-01
        • 1970-01-01
        • 2012-05-11
        • 1970-01-01
        相关资源
        最近更新 更多