基于Python棉花糖条件的验证

时间:2020-09-04 06:12:40

标签: python marshmallow

这是我的代码

from marshmallow import Schema, fields,ValidationError,INCLUDE


class userschema(Schema):
    name = fields.String()
    gender = fields.String()
    age = fields.Integer(validate=Range(min=18, max=100))

def user_check(user):
    try:
        validate = userschema().load(user,unknown=INCLUDE)
        print(validate)
    except ValidationError as err:
        print(err.messages)


user_1 = {"name":"priya","gender":"female","age":20}
user_2 = {"name":"gowtham","gender":"male","age":50}

user_check(user_1)

有什么方法可以验证男性要求的最低年龄为21岁,女性要求的最低年龄为18岁

1 个答案:

答案 0 :(得分:2)

您使用的验证器(validate.Range)。它将为每个用户验证男性和女性。对于您的情况,您需要自定义验证器功能。使用类似这样的东西。

# other imports
from marshmallow import validates_schema

class UserSchema(Schema):
    name = fields.String()
    gender = fields.String()
    age = fields.Integer()
    
    @validates_schema
    def validate_age(self, data, **kwargs):
        if data['gender'] == 'male':
            if data['age'] < 21:
                raise ValidationError("Minimum age for males is 21.")

        if data['gender'] == 'female':
            if data['age'] < 18:
                raise ValidationError("Minimum age for females is 18.")

参考: https://marshmallow.readthedocs.io/en/latest/extending.html#schema-level-validation