棉花糖电子邮件的自定义验证消息

时间:2020-09-17 18:44:46

标签: python flask-marshmallow

我使用以下架构来验证数据:

class UserSchema(db_schema.Schema):
    email = data_fields.Email(required = True, 
    error_messages={
          'required': 'Email is mandatory field.', 
          'type': 'The manager email is not valid.'
    })

但是ValidationError.messages.items具有以下消息:

 "Not a valid email address."

如何使其显示我的自定义消息?在任何地方都有关于error_messages词典的可能值的完整列表,因为我怀疑我也需要覆盖其他消息。

3 个答案:

答案 0 :(得分:1)

看看 https://github.com/marshmallow-code/marshmallow/blob/dev/src/marshmallow/fields.py

Field类定义了“ required”,“ null”和“ validator_failed”

class Field(FieldABC):
     ...
     default_error_messages = {
            "required": "Missing data for required field.",
            "null": "Field may not be null.",
            "validator_failed": "Invalid value.",
        }
     ...

特定字段的实现会继承这些消息,并且可能会扩展列表。例如电子邮件将其他错误消息定义为“无效”

class Email(String):
    ...
    default_error_messages = {"invalid": "Not a valid email address."}
    ...

注意:看来电子邮件和其他字段会覆盖default_error_messages(而不是扩展它们),但实际上错误消息是“收集的”显式的,包括父类

class Field(FieldABC):
    ...
    # Collect default error message from self and parent classes
    messages = {}  # type: typing.Dict[str, str]
    for cls in reversed(self.__class__.__mro__):
        messages.update(getattr(cls, "default_error_messages", {}))
    messages.update(error_messages or {})
    self.error_messages = messages
    ...

答案 1 :(得分:0)

我发现error_messages字典有误,密钥应为“无效”:

class UserSchema(db_schema.Schema):
    email = data_fields.Email(required = True, 
    error_messages={
          'required': 'Email is mandatory field.', 
          'invalid': 'The manager email is not valid.'
    })

答案 2 :(得分:0)

error_messages = {
    'required': 'Missing data for required field.',
    'null': 'Field may not be null.',
    'validator_failed': 'Invalid value.',
} 

您做得对,但要使用的密钥是“validator_failed”。这将在验证失败时覆盖默认错误消息!