gpt4 book ai didi

python - 使用 flask-restful RequestParser 进行嵌套验证

转载 作者:IT老高 更新时间:2023-10-28 22:15:05 26 4
gpt4 key购买 nike

使用 flask-restful微框架,我在构建将验证嵌套资源的 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 reqparse
parser = reqparse.RequestParser()
parser.add_argument('a_list', type=MyObject, action='append')

...但是您将如何验证 a_list 中每个字典的嵌套 MyObject?或者,这是错误的方法吗?

这个对应的 API 将每个 MyObject 本质上视为一个对象字面量,并且可能有一个或多个传递给服务;因此,扁平化资源格式不适用于这种情况。

最佳答案

我通过为嵌套对象创建 RequestParser 实例取得了成功。像往常一样首先解析根对象,然后使用结果输入嵌套对象的解析器。

诀窍是 add_argument 方法的 location 参数和 parse_args 方法的 req 参数。它们让您可以操纵 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)

关于python - 使用 flask-restful RequestParser 进行嵌套验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19234737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com