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

marshmallow中的数据校验错误:ValidationError()详解

发布时间:2023-12-25 08:21:49

在marshmallow中,数据校验错误是通过ValidationError类来表示的。该类主要用于收集和显示数据校验错误信息。

首先,让我们看一个简单的例子来理解ValidationError的使用方法。

from marshmallow import Schema, fields, ValidationError

class UserSchema(Schema):
    name = fields.Str(required=True)
    age = fields.Integer(required=True)

data = {
    'name': 'John',
    'age': 'twenty'
}

try:
    user = UserSchema().load(data)
except ValidationError as err:
    print(err.messages)

在上面的例子中,我们定义了一个UserSchema类来验证用户数据。该类有两个字段name和age,分别是必填字段。然后我们创建了一个data字典,其中age字段的值是一个字符串,而不是一个整数。接下来,我们尝试使用UserSchema来加载data字典。

由于数据校验失败,将引发一个ValidationError异常。在异常处理块中,我们可以通过访问err.messages属性来获取校验错误的详细信息。在这个例子中,输出会是{'age': ['Not a valid integer.']}

ValidationError类的messages属性是一个字典,其中的键是错误字段的名称,值是对应字段的错误信息列表。我们可以使用这些错误信息来显示给用户,或者根据需要进行其他处理。

除了messages属性,ValidationError类还有其他一些属性和方法用于进一步处理校验错误。

- field_names:一个包含了所有错误字段名称的列表。如果有多个字段出现错误,可以使用这个列表来获取它们的名称。

- field_dict:一个包含了所有错误字段名称和错误信息列表的字典。可以使用这个字典来获取每个字段的所有错误信息。

- normalized_messages():一个方法,返回一个以字段名称为键,错误信息字符串为值的字典。这些错误信息已经经过了格式化处理,可以直接展示给用户。

让我们继续改进上面的例子来演示这些属性和方法的使用。

from marshmallow import Schema, fields, ValidationError

class UserSchema(Schema):
    name = fields.Str(required=True)
    age = fields.Integer(required=True)

data = {
    'name': 'John',
    'age': 'twenty'
}

try:
    user = UserSchema().load(data)
except ValidationError as err:
    print(err.field_names)  # 输出: ['age']
    print(err.field_dict)   # 输出: {'age': ['Not a valid integer.']}
    print(err.normalized_messages())  # 输出: {'age': 'Not a valid integer.'}

通过以上的代码示例,我们可以看到field_names属性返回了一个包含了错误字段名称的列表,field_dict属性返回了一个包含了错误字段名称和错误信息列表的字典,normalized_messages()方法返回了一个格式化处理后的字典。这些属性和方法可以帮助我们更好地处理数据校验错误的信息。

总结一下,ValidationError是marshmallow中用于表示数据校验错误的类。它具有messages属性,用于包含字段名称和错误信息的字典。此外,还有其他一些属性和方法可以用于获取和处理数据校验错误的详细信息。通过使用ValidationError类,我们可以更好地处理和显示数据校验错误。