Fan*_*ang 3 python validation cerberus
我正在尝试使用 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"}}}
Run Code Online (Sandbox Code Playgroud)
更高级别的架构是这样的:
{"something": {"type": "list", "schema": "type": [A, B, C]}}
Run Code Online (Sandbox Code Playgroud)
这显然行不通。
我想验证一个列表,其中的元素只需要通过(A, B, C). 我不知道如何用 Cerberus 做到这一点,我正在寻求帮助。
谢谢。
尝试这个:
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
Run Code Online (Sandbox Code Playgroud)
这要归功于anyof_*,这是所谓的of-rules提供的几个选项之一。这些规则允许您定义不同的规则集以进行验证。如果该字段根据前缀逻辑all、any、one或none对列表中的集合进行验证,则该字段将被视为有效。有关详细信息,请参阅相关文档。