📜  FileExtensionValidator – 验证 Django 中的文件扩展名(1)

📅  最后修改于: 2023-12-03 15:00:45.196000             🧑  作者: Mango

FileExtensionValidator - 验证 Django 中的文件扩展名

在 Django 中,我们经常需要验证上传的文件的扩展名是否符合要求。这时候,可以使用 Django 自带的文件扩展名验证器 FileExtensionValidator。

如何使用

使用 FileExtensionValidator,我们需要先导入它:

from django.core.validators import FileExtensionValidator

然后我们可以创建一个 FileExtensionValidator 的实例,来验证上传的文件是否符合扩展名要求。比如,我们要验证上传的文件是否是 .jpg 或者 .png 格式的,可以这样写:

from django import forms
from django.core.validators import FileExtensionValidator

class MyForm(forms.Form):
    image = forms.ImageField(validators=[FileExtensionValidator(['jpg', 'png'])])

在这个例子中,我们创建了一个表单类 MyForm,它包含一个 ImageField 字段。通过给 ImageField 字段的 validators 参数传递一个 FileExtensionValidator 的实例,我们可以限制上传的图片必须是 jpg 或 png 格式的。

参数说明

FileExtensionValidator 支持以下参数:

  • extensions:要验证的扩展名,可以是一个列表或者一个字符串,多个扩展名用逗号分隔。

    validator = FileExtensionValidator(['jpg', 'png'])
    # 或者
    validator = FileExtensionValidator('jpg,png')
    
  • message:验证失败时的错误信息。可以是一个字符串或一个 callable 对象。如果是 callable 对象,它可以接受一个参数,即验证的文件名,返回一个字符串作为错误信息。

    validator = FileExtensionValidator(['jpg', 'png'], message='只能上传 JPG 或 PNG 格式的图片。')
    # 或者
    def error_message(filename):
        return '文件 %s 不是 JPG 或 PNG 格式的图片。' % filename
    validator = FileExtensionValidator(['jpg', 'png'], message=error_message)
    
  • code:验证失败时的错误码。默认是 'invalid_extension'。

    validator = FileExtensionValidator(['jpg', 'png'], code='invalid_image_extension')
    
注意事项
  • FileExtensionValidator 只验证文件的扩展名,不验证文件内容是否符合要求。如果需要验证文件内容,请使用 FileValidator 或者自定义验证器。

  • FileExtensionValidator 只验证扩展名,不区分大小写。比如,'jpg' 和 'JPG' 在验证时等价。

  • 在使用 FileExtensionValidator 时,一定要指定合法的扩展名列表,否则会出现安全问题。建议使用白名单机制,只允许上传必需的文件类型,禁止上传可执行文件等危险文件。

结语

FileExtensionValidator 是 Django 提供的一个方便的文件扩展名验证器。它能够很好地帮助我们验证上传的文件是否符合要求。但需要注意,除了扩展名之外,还需要其他验证机制来确保上传的文件安全。