欢迎访问宙启技术站
智能推送

marshmallow.validateLength()函数与max_length参数的深入理解

发布时间:2024-01-05 05:57:34

marshmallow.validateLength()函数是marshmallow库中用于验证输入值长度的一个方法。该方法用于比较输入值的长度与给定的最大长度参数,如果输入值的长度超过最大长度参数,则会抛出一个ValidationError。

validateLength()方法的定义如下:

@validates_length(max=None, min=None, equal=None, error=None, error_msg=None)

该方法接受以下参数:

1. max (可选):允许的最大长度。如果输入值长度超过该值,则会抛出一个ValidationError。默认为None,表示没有最大长度限制。

2. min (可选):允许的最小长度。如果输入值长度小于该值,则会抛出一个ValidationError。默认为None,表示没有最小长度限制。

3. equal (可选):允许的长度等于该值。如果输入值长度不等于该值,则会抛出一个ValidationError。默认为None,表示没有长度等于限制。

4. error (可选):一个自定义的错误消息。如果提供了该参数,就会使用此错误消息替代默认的错误消息。

5. error_msg (可选):同上,之后的版本可能会弃用。

下面通过一个使用例子来更好地理解validateLength()方法与max_length参数的使用。

from marshmallow import Schema, fields, validates_length, ValidationError

class UserSchema(Schema):
    name = fields.Str()

    @validates_length(max_length=10)
    def validate_name_length(self, value):
        if len(value) < 5:
            raise ValidationError('Name length should be at least 5 characters.')

user_data = {
    'name': 'John Doe'
}

try:
    schema = UserSchema()
    result = schema.load(user_data)
    print(result)
except ValidationError as err:
    print(err.messages)

在上面的例子中,我们定义了一个UserSchema,其中包含了一个name字段。我们对name字段使用了validateLength()方法,并将max_length参数设置为10。这意味着输入的name的长度不能超过10个字符。

在validate_name_length()方法中,我们加入了额外的验证逻辑。如果name字段的长度小于5个字符,我们会抛出一个ValidationError,并以自定义的错误消息提醒用户。

在上面的例子中,我们尝试加载一个包含'name'键的字典对象。由于'name'的长度为8个字符,满足了validateLength()方法定义的条件,所以没有抛出ValidationError,输出结果为字典对象{'name': 'John Doe'}。

如果我们将name字段的值改为'John',虽然它的长度超过了5个字符,但没有超过10个字符,所以仍然满足了validateLength()方法定义的条件,最终结果仍然是字典对象{'name': 'John'}。

然而,如果我们将name字段的值改为'Jack Smith',这个值的长度为10个字符,已经达到了max_length参数的最大允许长度,因此validateLength()方法会抛出一个ValidationError,错误消息为默认的错误消息"Longer than maximum length 10."。

总结:marshmallow.validateLength()方法与max_length参数可以用于验证输入值的长度是否满足给定的最大长度限制。我们还可以添加其他的验证逻辑,并抛出自定义的ValidationError及错误消息。这个方法对于在使用marshmallow验证数据时非常有用。