1

我正在尝试dict使用 Colander 作为我的验证后端来接受以下 Python 的 URL 序列化版本:

{'foo': [1,2,3]}

我解决这个问题的方式主要是colander.SequenceSchema在各种配置中使用,没有一个会产生有意义的错误:

# first approach
class ListItem(colander.MappingSchema):
    item = colander.SchemaNode(colander.Int())

class ListContainer(colander.SequenceSchema):
    items = ListItem()

# second approach
class ListContainer(colander.SequenceSchema):
    items = colander.SchemaNode(colander.Int())

# third approach
colander.SchemaNode(
    colander.Mapping(),
    colander.SchemaNode(
        colander.Sequence(),
        typ=colander.Int(),
        name=my_param_name
    )
)

我实际上相当确定前两种方法是等效的。

在实际验证这一点方面,我尝试使用一些params在调用时传递给 kwarg的结构requests.get

  • my_param_name = [1,2,3]
  • my_param_name = [(my_param_name, 1), (my_param_name, 2), (my_param_name, 3)]
  • my_param_name = {my_param_name: [1,2,3]}

my_param_name: u'"1" is not iterable'在每种情况下,漏勺都会在上或在最后一种情况下吐出一些变化my_param_name: u'"[1,2,3]" is not iterable'。这个错误非常迟钝,文档没有概述SequenceSchema(甚至colander.List)接受数组作为 URL 参数中的值的正确用例,并且由于 Colander 的采用率相对较低,很难在网络上找到一个项目以这种方式使用其中任何一个。

在使用滤锅通过验证时,是否可以接受标量原始值列表作为 URL 参数的值?

4

0 回答 0