Валидатор validate_image_file_extension
Валидатор validate_image_file_extension применяется к полям форм, принимающим загружаемые файлы, и проверяет, что расширение файла соответствует одному из допустимых форматов изображений. По умолчанию разрешены расширения '.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.webp'. Валидатор используется в основном с полями FileField и ImageField. Он поднимает исключение ValidationError, если расширение файла не входит в список разрешённых.
Синтаксис
from django.core.validators import validate_image_file_extension
validate_image_file_extension(value)
Пример
Давайте создадим форму загрузки аватара пользователя с валидацией расширения изображения:
from django import forms
from django.core.validators import validate_image_file_extension
class AvatarForm(forms.Form):
avatar = forms.FileField(
validators=[validate_image_file_extension],
label="Upload avatar"
)
В этом примере поле avatar автоматически проверяет, что загружаемый файл имеет допустимое расширение изображения. Если загрузить файл с расширением '.txt', валидатор выбросит исключение.
Пример
Валидатор также работает с полем ImageField в модели, что позволяет проверять расширение на уровне формы:
from django import forms
from .models import UserProfile
class ProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ['avatar']
def clean_avatar(self):
avatar = self.cleaned_data.get('avatar')
if avatar:
validate_image_file_extension(avatar)
return avatar
Здесь валидатор вызывается вручную в методе clean_avatar формы. Это позволяет добавить дополнительную логику проверки после стандартных проверок модели.
Пример
Вы также можете использовать валидатор в связке с другими проверками, например, для ограничения размера файла:
from django import forms
from django.core.validators import validate_image_file_extension
from django.core.validators import FileExtensionValidator
class ImageUploadForm(forms.Form):
image = forms.FileField(
validators=[
validate_image_file_extension,
FileExtensionValidator(allowed_extensions=['jpg', 'png'])
],
label="Upload image"
)
Результат выполнения кода при попытке загрузить недопустимый файл:
"File extension 'txt' is not allowed. Allowed extensions are: 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff', 'webp'."
Смотрите также
-
класс
FileField,
предназначенный для загрузки файлов в формах -
класс
ImageField,
предназначенный для загрузки изображений в формах -
валидатор
FileExtensionValidator,
проверяющий расширение файла -
метод
clean,
используемый для кастомной валидации полей формы