Rest框架图像验证

use*_*120 4 django django-rest-framework

我有一个通过 Django Rest Framework 发送图像的表单。序列化器如图所示:

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

    class Meta:
        model = Profile
        fields = ('avatar',)
Run Code Online (Sandbox Code Playgroud)

我还进行了图像验证,检查图像的大小,使其不超过 12MB:

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!")
Run Code Online (Sandbox Code Playgroud)

当我尝试上传大于 12mb 的图像时,图像大小会被打印出来,但是,我在 Chrome 的网络选项卡中收到此响应:我读到Failed to load response data这可能是由于图像的大小所致(我试图上传 30mb 的图像)。未ValidationError显示,并且用户收到 500 服务器错误。我怎样才能解决这个问题?

Sai*_*a A 6

序列化器具有字段级验证功能,可以在返回之前验证属性。

https://www.django-rest-framework.org/api-guide/serializers/#field-level-validation

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',)
Run Code Online (Sandbox Code Playgroud)

  • 您需要在 validate_avatar 函数中返回图像,除非您要获取 avatar 字段的空值, (2认同)