python - 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 岁的年龄
解决方案
您使用的验证器 (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
推荐阅读
- bots - Telegram Bot InlineKeyboardButton 全文
- angular - Angular 5 更改检测不会为提供 useValue 的提供程序触发
- mysql - 如何获得今天或未来 7 天(周)过生日的朋友?
- typescript - Typescript 声明文件中的剩余参数
- regex - 如何使捕获组 (.+?) 在 Cucumber Java 中按预期工作?
- c++ - 当 std::unique_ptr 使用本地原始指针初始化时会发生什么?
- postgresql - aws - 如何通过配置文件将多个 postgresql 连接器添加到 EMR
- java - 使用 testNG 进行 Spring 启动测试
- mysql - 具有特定数据记录的日期之间的mysql
- javascript - (非回调)函数表达式是否必须分配给变量?