Python 在Colander模式中操作验证数据
我有一套Colander SchemaNodes,用于API中的金字塔/檐口。对于某些查询字符串arg,传递一个范围(即Python 在Colander模式中操作验证数据,python,pyramid,colander,cornice,Python,Pyramid,Colander,Cornice,我有一套Colander SchemaNodes,用于API中的金字塔/檐口。对于某些查询字符串arg,传递一个范围(即time=X-Y表示从X到Y的时间范围,其中X和Y是表示年代的整数)。我目前使用RegEx()验证器来验证这一点,以确保传入一个历元或历元范围: class TimeOrRange(SchemaNode): schema_type = String location = "querystring" description = 'Time (or rang
time=X-Y
表示从X到Y的时间范围,其中X和Y是表示年代的整数)。我目前使用RegEx()
验证器来验证这一点,以确保传入一个历元或历元范围:
class TimeOrRange(SchemaNode):
schema_type = String
location = "querystring"
description = 'Time (or range) in epochs: ssssssssss(-ssssssssss)'
validator = Regex("^[0-9]{10}\-{0,1}[0-9]{0,10}$")
然后,我在一个映射模式中使用它,然后通过@view(schema=TimedThingGet)
将其绑定到我的檐口视图:
我想做的是更新我的TimeOrRange
schemaode中的返回值,以便TimedThingGet
中的time
是一个时间范围的元组。换句话说,如果将time=X-Y
传递给TimedThingGet
实例,则time=(X,Y)
将在验证数据中返回。类似地,如果只传入X
,那么我希望Y
设置为now()的纪元
看起来set_value()
是解决问题的方法,这里是问题的地方,这里有一些额外的积分:
验证之前或之后是否调用设置\u值
set\u value
是否有权访问验证程序,以便创建正则表达式组的RegEx验证程序可以用来设置我的元组:time=(validated.match.group[1],validated.match.group[2])
我想你应该看看:
您可以传递给SchemaAnode的可调用制备程序:
它将允许您在将数据传递给验证器之前对其进行操作
以及(可选)在:
这允许您在模式实例化后设置其他属性。非常好的建议。使用preparer的一个不足之处是必须将Function()validator与自定义验证器函数一起使用,以解析准备好的值。我之所以这样说,只是因为我最初的问题想利用来自RegEx验证器的组,这是不可能的。解决方法是在制备程序中使用正则表达式,并将组保存到(比如)列表中。然后,自定义验证器函数可以获取列表并进行验证。
class TimedThingGet(MappingSchema):
time = TimeOrRange(missing=drop)