marshmallow.validateLength()函数与max_length参数的深入理解
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验证数据时非常有用。
