1

スキーマにない値がペイロードにある場合、colander でエラーを発生させることはできますか? したがって、ホワイトリストに登録されたフィールドのみを許可しますか?

これはサンプルです:

# 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
   }
}
4

1 に答える 1

3

はい、ドキュメントを参照してくださいcolander.Mapping

でマッピングを作成すると、逆シリアル化中に不明なキーが cstruct に存在する場合に例外colander.Mapping(unknown='raise') が発生します。colander.Invalid

トラッカーの問題 116 によると、これを Schema オブジェクトに適用する方法は、schema_typeメソッドをオーバーライドすることです。

class StrictMappingSchema(MappingSchema):
    def schema_type(self, **kw):
        return colander.Mapping(unknown='raise')

class SamplePayload(StrictMappingSchema):
    name = SchemaNode(String())
    foo  = SchemaNode(Int())
于 2015-01-07T09:32:39.563 に答える