flask验证式RequestParser的嵌套验证
使用flask式的微框架,我很难构建一个RequestParser可以验证嵌套资源的。假设期望的JSON资源格式为:
{ 'a_list': [
{
'obj1': 1,
'obj2': 2,
'obj3': 3
},
{
'obj1': 1,
'obj2': 2,
'obj3': 3
}
]
}
中的每个项目都a_list
对应一个对象:
class MyObject(object): def __init__(self, obj1, obj2, obj3)
self.obj1 = obj1
self.obj2 = obj2
self.obj3 = obj3
…然后使用如下形式创建一个RequestParser
:
from flask.ext.restful import reqparseparser = reqparse.RequestParser()
parser.add_argument('a_list', type=MyObject, action='append')
…但是你将如何验证其中MyObject每个字典的嵌套s a_list
?或者,这是错误的方法吗?
与此对应的API MyObject本质上将每个对象视为对象文字,并且可能有一个或多个传递给服务;因此,在这种情况下,拼合资源格式将不起作用。
回答:
通过RequestParser
为嵌套对象创建实例,我获得了成功。首先按照通常的方式解析根对象,然后使用结果将其馈送到嵌套对象的解析器中。
诀窍是location
该参数的add_argument
方法和req
对参数的parse_args
方法。它们使你可以操纵RequestParser
外观。
这是一个例子:
root_parser = reqparse.RequestParser()root_parser.add_argument('id', type=int)
root_parser.add_argument('name', type=str)
root_parser.add_argument('nested_one', type=dict)
root_parser.add_argument('nested_two', type=dict)
root_args = root_parser.parse_args()
nested_one_parser = reqparse.RequestParser()
nested_one_parser.add_argument('id', type=int, location=('nested_one',))
nested_one_args = nested_one_parser.parse_args(req=root_args)
nested_two_parser = reqparse.RequestParser()
nested_two_parser.add_argument('id', type=int, location=('nested_two',))
nested_two_args = nested_two_parser.parse_args(req=root_args)
以上是 flask验证式RequestParser的嵌套验证 的全部内容, 来源链接: utcz.com/qa/430401.html