📅  最后修改于: 2023-12-03 15:00:45.196000             🧑  作者: Mango
在 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 提供的一个方便的文件扩展名验证器。它能够很好地帮助我们验证上传的文件是否符合要求。但需要注意,除了扩展名之外,还需要其他验证机制来确保上传的文件安全。