Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Rest框架图像验证_Django_Django Rest Framework - Fatal编程技术网

Django Rest框架图像验证

Django Rest框架图像验证,django,django-rest-framework,Django,Django Rest Framework,我有一个表单,它通过Django Rest框架发送图像。序列化程序如图所示: class AvatarSerializer(serializers.ModelSerializer): avatar = Base64ImageField(validators=[image_validation]) class Meta: model = Profile fields = ('avatar',) 我还进行了图像验证,检查图像大小,使其不超过12MB

我有一个表单,它通过Django Rest框架发送图像。序列化程序如图所示:

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

    class Meta:
        model = Profile
        fields = ('avatar',)
我还进行了图像验证,检查图像大小,使其不超过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!")

当我试图上传大于12mb的图像时,图像大小会被打印出来,但是,我在Chrome的网络选项卡中得到了这样的响应:
未能加载响应数据
我了解到这可能是因为图像的大小(我试图上传30mb的图像)。不会显示
ValidationError
,用户会收到一个500服务器错误。如何解决此问题?

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


每个请求都有服务器超时。如果请求花费太多时间,它将杀死并返回500个内部错误,然后再进入序列化程序。@user2896120您是否在使用
django额外字段
作为
Base64ImageField
?@Mirza715如何使它在花费太多时间时返回有效错误?@funnydman我正在使用
Base64ImageField
@user2896120请参见此。在旁注中,请在将文件上传到服务器之前尝试压缩文件。使用此选项后,我可以知道您会遇到什么错误。您需要在validate_avatar func中返回图像,除非您将获得avatar字段的空值,
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',)