在Django管理中验证图像大小?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (41)

我看到很多使用Django应用程序的人都在上传图片后,会自动调整图片大小。这对某些情况是好的,但我不想这样做。相反,我只是想强迫用户上传一个已经合适大小的文件。

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

我已经知道如何获取图像的宽度和高度,但在图像上传并成功提交表单之前,我无法在服务器端完成该操作。如果可能的话,我怎样才能更早地检查这个问题呢?

提问于
用户回答回答于

正确的位置是在表单验证期间。

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

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)
用户回答回答于

虽然可能需要使用其他技术,但我不认为你可以直接使用javascript。

扫码关注云+社区