gpt4 book ai didi

python - Flask_restplus 递归 json_mapping

转载 作者:行者123 更新时间:2023-11-30 22:30:04 35 4
gpt4 key购买 nike

是否可以使用相同的 json_mapping 为对象提供递归映射?

示例:

person_json_mapping = api.model('Person', {
'name': fields.String(),
'date_of_birth': fields.Date(),
'parents': fields.List(fields.Nested(##person_json_mapping##))
}

如何在 self 内部使用 person_json_mapping

最佳答案

有一种使用 Flask_restplus 定义递归映射的方法,但有一个限制,您必须假设您的情况所需的最大递归级别。你不会想联系亚当和伊娃吧?

不要直接使用 api.model,而是编写一个递归构建该模型的方法,在每次递归调用中递减 iteration_number 参数。

def recursive_person_mapping(iteration_number=10):
person_json_mapping = {
'name': fields.String(),
'date_of_birth': fields.Date()
}
if iteration_number:
person_json_mapping['parents'] = fields.List(fields.Nested(recursive_person_mapping(iteration_number-1)))
return api.model('Person'+str(iteration_number), person_json_mapping)

然后记得在使用编码器修饰方法时进行函数调用,如下所示:

@api.marshal_with(recursive_person_mapping())
def get(self):
...

注意圆括号!

还值得注意的是,如果您使用 swagger,则 'Person'+str(iteration_number) 是必需的。如果不添加 iteration_number ,您最终会出现递归限制溢出,从而导致内部服务器错误。除了 swagger 之外,mapper 没有它也能做得很好。

在对最大递归级别进行任意假设后,在超出递归限制时自动通知管理员可能也是一个好主意。这可能是准备数据的方法的责任,而不是编码器本身的责任。

关于python - Flask_restplus 递归 json_mapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46171375/

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