Проверка изображений Rest Framework - PullRequest
0 голосов
/ 30 января 2020

У меня есть форма, которая отправляет изображение через Django Rest Framework. Сериализатор выглядит так:

class AvatarSerializer(serializers.ModelSerializer):
    avatar = Base64ImageField(validators=[image_validation])

    class Meta:
        model = Profile
        fields = ('avatar',)

У меня также есть проверка изображения, которая проверяет размер изображения, чтобы он не превышал 12 МБ:

def image_validation(image):
    # 12MB
    MAX_FILE_SIZE = 12000000
    print(image.name)
    if image.size > MAX_FILE_SIZE:
        print(image.size)
        raise ValidationError("File size too big!")

Размер изображения распечатывается однако, когда я пытаюсь загрузить изображение размером более 12 МБ, я получаю ответ на вкладке сети Chrome: Failed to load response data Я прочитал, что это может быть из-за размера изображения (я пытался загрузить изображение 30 МБ) , ValidationError не отображается, и пользователь получает ошибку 500 сервера. Как я могу это исправить?

1 Ответ

0 голосов
/ 30 января 2020

сериализаторы имеют функцию проверка на уровне поля , которая проверяет свойство перед возвратом.

https://www.django-rest-framework.org/api-guide/serializers/#field -уровневая проверка

class AvatarSerializer(serializers.ModelSerializer):
    avatar = Base64ImageField()

    def validate_avatar(self, image):
        # 12MB
        MAX_FILE_SIZE = 12000000
        print(image.name)
        if image.size > MAX_FILE_SIZE:
            print(image.size)
            raise ValidationError("File size too big!")


    class Meta:
        model = Profile
        fields = ('avatar',)
...