Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中使用ImageField上载之前,请验证图像高度、宽度和文件类型_Python_Django_Django Models - Fatal编程技术网

Python 在Django中使用ImageField上载之前,请验证图像高度、宽度和文件类型

Python 在Django中使用ImageField上载之前,请验证图像高度、宽度和文件类型,python,django,django-models,Python,Django,Django Models,我将很快让一个朋友通过我的小Django项目的管理界面上传图像。我希望他遵守两条规则: 图像必须为2000 x 1200像素 图像必须是PNG文件 我当前的模型如下所示: class MapLayout(models.Model): name = models.CharField(max_length=255) description = models.TextField(max_length=255) slug = models.SlugField(max_leng

我将很快让一个朋友通过我的小Django项目的管理界面上传图像。我希望他遵守两条规则:

  • 图像必须为2000 x 1200像素
  • 图像必须是PNG文件
我当前的模型如下所示:

class MapLayout(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField(max_length=255)
    slug = models.SlugField(max_length=255)

    def upload_details(instance, filename):
        path = "maps/" # Upload location
        format = instance.slug + '.png' # Filename
        return os.path.join(path, format)

    image = models.ImageField(upload_to=upload_details)

    def __str__(self):
        return self.name
作为参考,我使用Python3.4运行Django 1.6


如何在上传前验证图像的高度、宽度和文件类型?

您可以使用诸如Pillow之类的库进行验证:

from PIL import Image

image=Image.open(filepath)
image.size # (width,height) tuple
image.format # (keeps the image format)
您可以在官方文档中找到更多信息:

“上传前验证图像高度、宽度和文件类型”如果您真的想在下载前验证图像高度、宽度和文件类型,您必须寻找客户端技术。但这并不能免除您检查服务器端,因为您不能信任客户端。