在 Colander SchemaNode 中操作经过验证的数据
Manipulating validated data in Colander SchemaNode
我有一组 Colander SchemaNodes 在 API 中与 Pyramid/Cornice 一起使用。对于某些查询字符串参数,会传递一个范围(即 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}$")
然后我在 MappingSchema 中使用它,然后使用 @view(schema=TimedThingGet)
:
将其绑定到我的 Cornice 视图
class TimedThingGet(MappingSchema):
time = TimeOrRange(missing=drop)
我想做的是更新 TimeOrRange
SchemaNode 代码中的 return 值,因此 TimedThingGet
中的 time
是时间范围的元组。换句话说,如果将 time=X-Y
传递给 TimedThingGet
实例,则 time=(x, y)
将在验证数据中 returned。同样,如果只传入X
,那么我希望Y
设置为now()
的纪元。
看起来 set_value()
是可行的方法,这里是问题得到一些额外功劳的地方:
set_value
是在验证之前还是之后被调用?
set_value
是否可以访问验证器,以便可以使用创建正则表达式组的 RegEx
验证器来设置我的元组:time=(validated.match.group[1], validated.match.group[2])
?
我认为你实际上应该看看:
您可以传递给 SchemaNode 的可调用准备器:
它将允许您在将数据传递给验证器之前对其进行操作
并且可选择在:
http://docs.pylonsproject.org/projects/colander/en/latest/binding.html#what-is-schema-binding
这允许您在实例化架构后设置其他属性。
我有一组 Colander SchemaNodes 在 API 中与 Pyramid/Cornice 一起使用。对于某些查询字符串参数,会传递一个范围(即 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}$")
然后我在 MappingSchema 中使用它,然后使用 @view(schema=TimedThingGet)
:
class TimedThingGet(MappingSchema):
time = TimeOrRange(missing=drop)
我想做的是更新 TimeOrRange
SchemaNode 代码中的 return 值,因此 TimedThingGet
中的 time
是时间范围的元组。换句话说,如果将 time=X-Y
传递给 TimedThingGet
实例,则 time=(x, y)
将在验证数据中 returned。同样,如果只传入X
,那么我希望Y
设置为now()
的纪元。
看起来 set_value()
是可行的方法,这里是问题得到一些额外功劳的地方:
set_value
是在验证之前还是之后被调用?set_value
是否可以访问验证器,以便可以使用创建正则表达式组的RegEx
验证器来设置我的元组:time=(validated.match.group[1], validated.match.group[2])
?
我认为你实际上应该看看:
您可以传递给 SchemaNode 的可调用准备器:
它将允许您在将数据传递给验证器之前对其进行操作
并且可选择在:
http://docs.pylonsproject.org/projects/colander/en/latest/binding.html#what-is-schema-binding
这允许您在实例化架构后设置其他属性。