Fastapi+vue3自动化测试平台(5)--封装树形结构列表生成器
- 软件开发
- 2025-09-05 01:48:01

使用FastAPI封装树形结构生成函数:高效处理层级数据
在Web开发中,树形结构是一种常见的数据组织形式,常用于菜单、分类、组织结构等场景。本文将介绍如何使用FastAPI封装一个通用的树形结构生成函数,支持动态选择字段,并递归构建树形数据。
需求分析我们需要实现一个函数,能够根据给定的模型和父节点ID,递归生成树形结构。同时,支持动态选择需要返回的字段,以满足不同场景的需求。
实现思路 递归查询:从根节点(pid=0)开始,逐层查询子节点。动态字段选择:通过fields参数指定需要返回的字段。树形结构构建:将查询到的节点数据组织成树形结构。 代码实现以下是基于FastAPI和Tortoise ORM的实现代码:
from fastapi import FastAPI from tortoise.contrib.fastapi import register_tortoise from tortoise.models import Model from tortoise import fields app = FastAPI() # 示例模型 class Category(Model): id = fields.IntField(pk=True) name = fields.CharField(max_length=255) pid = fields.IntField(default=0) # 父节点ID # 树形结构生成函数 async def create_tree(model, pid: int = 0, fields: list = None): """ 获取树形结构,支持动态选择字段 :param model: 数据模型 :param pid: 父节点ID :param fields: 需要返回的字段列表 :return: 树形结构列表 """ # 查询当前层级的节点 nodes = await model.filter(pid=pid).values(*fields) tree = [] for node in nodes: # 当前节点的数据字典 node_data = {field: node[field] for field in fields} # 递归查找子节点 children = await create_tree(model, pid=node['id'], fields=fields) if children: node_data['children'] = children tree.append(node_data) return tree # FastAPI路由示例 @app.get("/tree") async def get_tree(): fields = ["id", "name"] # 动态选择字段 tree = await create_tree(Category, pid=0, fields=fields) return {"tree": tree} # 数据库初始化 register_tortoise( app, db_url="sqlite://:memory:", modules={"models": ["__main__"]}, generate_schemas=True, ) if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000) 代码解析模型定义:
Category是一个简单的分类模型,包含id、name和pid字段。pid表示父节点ID,根节点的pid为0。create_tree函数:
通过model.filter(pid=pid).values(*fields)查询当前层级的节点。使用递归调用create_tree获取子节点,并将结果添加到children字段中。返回完整的树形结构。FastAPI路由:
/tree接口调用create_tree函数,返回生成的树形结构。数据库初始化:
使用register_tortoise初始化数据库,并自动生成表结构。 使用示例启动FastAPI服务后,访问/tree接口,将返回如下格式的树形结构:
{ "tree": [ { "id": 1, "name": "Root", "children": [ { "id": 2, "name": "Child 1", "children": [] }, { "id": 3, "name": "Child 2", "children": [] } ] } ] } 前端代码 const defaultProps = { children: "children", label: "name" }; <el-tree ref="step_treeRef" :data="树结构" :props="defaultProps" default-expand-all > </tree> 总结通过封装create_tree函数,我们可以轻松生成树形结构,并支持动态选择字段。这种方法适用于各种层级数据的场景,如菜单、分类、组织结构等。结合FastAPI和Tortoise ORM,能够快速构建高效的Web服务。
希望本文对你有所帮助!如果有任何问题或建议,欢迎在评论区交流讨论。🚀
Fastapi+vue3自动化测试平台(5)--封装树形结构列表生成器由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Fastapi+vue3自动化测试平台(5)--封装树形结构列表生成器”
上一篇
机器学习--逻辑回归
下一篇
C语言全局变量environ