首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在django管理中验证图像大小

在django管理中验证图像大小
EN

Stack Overflow用户
提问于 2009-12-10 01:02:27
回答 3查看 17.6K关注 0票数 24

我看到很多有图片上传功能的Django应用程序的用户会在图片上传后自动调整图片大小。这在某些情况下很好,但我不想这样做。相反,我只是想强制用户上传一个已经具有适当大小的文件。

我想有一个ImageField,我强制用户上传一个100x200的图像。如果他们上传的图像不完全是那样的大小,我希望管理表单作为无效返回。我也希望能够为宽高比做同样的事情。我想强制用户上传一个16:9的图像,并拒绝任何不符合的上传。

我已经知道如何获取图像的宽度和高度,但我不能在服务器端这样做,直到图像已经上传,并且表单提交成功。如果可能的话,我该如何更早地检查呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-10 01:20:19

执行此操作的正确位置是在表单验证期间。

一个快速示例(稍后将编辑/集成更多信息):

代码语言:javascript
复制
from django.core.files.images import get_image_dimensions
from django.contrib import admin
from django import forms

class myForm(forms.ModelForm):
   class Meta:
       model = myModel
   def clean_picture(self):
       picture = self.cleaned_data.get("picture")
       if not picture:
           raise forms.ValidationError("No image!")
       else:
           w, h = get_image_dimensions(picture)
           if w != 100:
               raise forms.ValidationError("The image is %i pixel wide. It's supposed to be 100px" % w)
           if h != 200:
               raise forms.ValidationError("The image is %i pixel high. It's supposed to be 200px" % h)
       return picture

class MyAdmin(admin.ModelAdmin):
    form = myForm

admin.site.register(Example, MyAdmin)
票数 56
EN

Stack Overflow用户

发布于 2015-04-09 13:34:08

在模型文件中使用此函数,

代码语言:javascript
复制
from django.core.exceptions import ValidationError

def validate_image(fieldfile_obj):
    filesize = fieldfile_obj.file.size
    megabyte_limit = 2.0
    if filesize > megabyte_limit*1024*1024:
        raise ValidationError("Max file size is %sMB" % str(megabyte_limit))

class Company(models.Model):
    logo = models.ImageField("Logo", upload_to=upload_logo_to,validators=[validate_image], blank=True, null=True,help_text='Maximum file size allowed is 2Mb')
票数 5
EN

Stack Overflow用户

发布于 2020-06-13 01:47:27

上述答案的更新和Models.py版本

代码语言:javascript
复制
from django.core.exceptions import ValidationError
from django.core.files.images import get_image_dimensions

class Model(models.Model):
 photo = models.ImageField()

 def clean(self):

    if not self.photo:
        raise ValidationError("No image!")
    else:
        w, h = get_image_dimensions(self.photo)
        if w != 200:
            raise ValidationError("The image is %i pixel wide. It's supposed to be 200px" % w)
        if h != 200:
            raise ValidationError("The image is %i pixel high. It's supposed to be 200px" % h)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1875316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档