Python Cerberus:一个字段是否可以有多个模式?

4

我将使用 Cerberus 来验证一些数据,但是遇到了问题。

我定义了几个较小的模式,例如:

A = {"type": "dict", "required": False, "schema": {"name": {"type": "string"}}}

B = {"type": "dict", "required": False, "schema": {"age": {"type": "integer"}}}

C = {"type": "dict", "required": False, "schema": {"gender": {"type": "string"}}}

更高级别的架构如下:

{"something": {"type": "list", "schema": "type": [A, B, C]}}

这显然行不通。

我想验证一个列表,其中的元素只需要通过 (A、B、C) 中的一个进行验证。我不知道如何使用 Cerberus 进行验证,正在寻求帮助。

谢谢。

1个回答

6

试试这个:

A = {"type": "dict", "schema": {"name": {"type": "string"}}}
B = {"type": "dict", "schema": {"age": {"type": "integer"}}}
C = {"type": "dict", "schema": {"gender": {"type": "string"}}}

schema = {'field':{'type':'list','anyof_schema':[A,B,C]}}

v = Validator(schema)

challenge = {'field':[{'name':'a name'}]}

v.validate(challenge)
True

这是由anyof_*实现的,它是所谓的of-rules提供的几个选项之一。这些规则允许您定义不同的规则集进行验证。如果字段根据前缀逻辑allanyonenone在列表中的集合上验证有效,则该字段将被视为有效。有关详细信息,请参阅相关文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接