禁止未知值?
Prohibit unknown values?
如果负载中的值不在模式中,我可以用漏勺报错吗?因此,只允许列入白名单的字段?
这是一个示例:
# coding=utf-8
from colander import MappingSchema, String, Length
from colander import SchemaNode
class SamplePayload(MappingSchema):
name = SchemaNode(String())
foo = SchemaNode(Int())
class Sample(MappingSchema):
type = SchemaNode(String(), validator=Length(max=32))
payload = SamplePayload()
# This json should not be accepted (and should yield something like: Unknown field in payload: bar
{
"type":"foo",
"payload":{
"name":"a name",
"foo":123,
"bar":false
}
}
是,见the docs of colander.Mapping
使用 colander.Mapping(unknown='raise')
创建映射将导致 colander.Invalid
在反序列化期间结构中存在未知键时引发异常。
根据issue 116 in the tracker,将其应用于架构对象的方法是覆盖schema_type
方法:
class StrictMappingSchema(MappingSchema):
def schema_type(self, **kw):
return colander.Mapping(unknown='raise')
class SamplePayload(StrictMappingSchema):
name = SchemaNode(String())
foo = SchemaNode(Int())
如果负载中的值不在模式中,我可以用漏勺报错吗?因此,只允许列入白名单的字段?
这是一个示例:
# coding=utf-8
from colander import MappingSchema, String, Length
from colander import SchemaNode
class SamplePayload(MappingSchema):
name = SchemaNode(String())
foo = SchemaNode(Int())
class Sample(MappingSchema):
type = SchemaNode(String(), validator=Length(max=32))
payload = SamplePayload()
# This json should not be accepted (and should yield something like: Unknown field in payload: bar
{
"type":"foo",
"payload":{
"name":"a name",
"foo":123,
"bar":false
}
}
是,见the docs of colander.Mapping
使用 colander.Mapping(unknown='raise')
创建映射将导致 colander.Invalid
在反序列化期间结构中存在未知键时引发异常。
根据issue 116 in the tracker,将其应用于架构对象的方法是覆盖schema_type
方法:
class StrictMappingSchema(MappingSchema):
def schema_type(self, **kw):
return colander.Mapping(unknown='raise')
class SamplePayload(StrictMappingSchema):
name = SchemaNode(String())
foo = SchemaNode(Int())