基于Python棉花糖条件的验证

2024-06-16 13:03:48 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的密码

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岁


Tags: namefieldsagestringincludeschemacheckgender
1条回答
网友
1楼 · 发布于 2024-06-16 13:03:48

您使用的验证器(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

相关问题 更多 >