我有一个父marshullow模式“ParentSchema”和2个嵌套的子模式“ChildSchema1”和“ChildSchema2”。两个嵌套的子模式都利用了@validates_schema装饰器来验证malmallow中的字段。它们看起来像这样:
ParenSchema.py
from marshmallow import Schema, fields
from schemas.childSchema1 import ChildSchema1
from schemas.childSchema2 import ChildSchema2
class ParentSchema(Schema):
child1 = fields.Nested(ChildSchema1)
child2 = fields.Nested(ChildSchema2)
foo = fields.String()
bar = fields.String()
ChildSchema1.py
^{pr2}$ChildSchema2.py
from marshmallow import Schema, pprint, post_load
from marshmallow import fields, ValidationError, validates, validates_schema
class ChildSchema2(Schema):
common_field = fields.String()
field3 = fields.String()
@validates("common_field")
def validate_common_field(self, common_field):
try:
# Exact Same Validation logic as common_field from ChildSchema1
except:
raise ValidationError('common_field is not valid')
假设ChildSchema1和ChildSchema2都有一个同名的字段,具有相同的验证器函数,我很乐意跟随DRY Principle并将该函数拉出ParentSchema.py. 在
你用一个单独的功能是好的。在
如果公共字段由两个子字段共享,则还可以使用继承来反映这一点,并对字段和逻辑进行因式分解。在
我发现的一个解决方案是创建一个单独的类来承载共享验证函数:
并通过删除@validates修饰符并在schema字段中使用
validate
参数,从ChildSchema1和ChildSchema2使用它。在ChildSchema1.py
^{pr2}$验证器.py 从棉花糖进口验证错误,验证
相关问题 更多 >
编程相关推荐