我在 API 中有一组与 Pyramid/Cornice 一起使用的滤锅 SchemaNode。对于某些查询字符串参数,传递一个范围(即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 中使用它,然后将其绑定到我的 Cornice 视图@view(schema=TimedThingGet):
class TimedThingGet(MappingSchema):
time = TimeOrRange(missing=drop)
我想做的是更新我的TimeOrRangeSchemaNode 代码中的返回值,所以timeinTimedThingGet是时间范围的元组。换句话说,如果time=X-Y传递给TimedThingGet实例,则time=(x, y)在验证数据中返回。同样,如果只X传入,那么我想Y设置为now().
看起来set_value()是要走的路,这就是问题得到一些额外功劳的地方:
set_value是在验证之前还是之后被调用?- 是否
set_value有权访问验证器,以便RegEx可以使用创建正则表达式组的验证器来设置我的元组:time=(validated.match.group[1], validated.match.group[2])?