当前位置: 首页 > news >正文

Fastapi + vue3 自动化测试平台(5)-- 封装树形结构列表生成器

使用FastAPI封装树形结构生成函数:高效处理层级数据

在Web开发中,树形结构是一种常见的数据组织形式,常用于菜单、分类、组织结构等场景。本文将介绍如何使用FastAPI封装一个通用的树形结构生成函数,支持动态选择字段,并递归构建树形数据。

需求分析

我们需要实现一个函数,能够根据给定的模型和父节点ID,递归生成树形结构。同时,支持动态选择需要返回的字段,以满足不同场景的需求。

实现思路

  1. 递归查询:从根节点(pid=0)开始,逐层查询子节点。
  2. 动态字段选择:通过fields参数指定需要返回的字段。
  3. 树形结构构建:将查询到的节点数据组织成树形结构。

代码实现

以下是基于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)

代码解析

  1. 模型定义

    • Category是一个简单的分类模型,包含idnamepid字段。
    • pid表示父节点ID,根节点的pid为0。
  2. create_tree函数

    • 通过model.filter(pid=pid).values(*fields)查询当前层级的节点。
    • 使用递归调用create_tree获取子节点,并将结果添加到children字段中。
    • 返回完整的树形结构。
  3. FastAPI路由

    • /tree接口调用create_tree函数,返回生成的树形结构。
  4. 数据库初始化

    • 使用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服务。

希望本文对你有所帮助!如果有任何问题或建议,欢迎在评论区交流讨论。🚀

相关文章:

  • NewMap10.3土地勘测定界自动化系统
  • 程序员-DeepSeek深度使用指南
  • Linux中线程创建,线程退出,线程接合
  • led+串口代码 重定向 STM32F030F4P6 fgetc multiply defined错误
  • 浏览器的Cookie 过期时间存储
  • sass中@import升级@use的使用区别与案例
  • 群联AI云防护——针对四层与七层协议的精细化安全防护方案
  • C# 添加图标
  • 函数式自定义组件调用
  • 冒险岛079 V8 整合版源码搭建教程+IDEA启动
  • 【产品资料】陀螺匠·企业助手v1.8 产品介绍
  • 练习题:39
  • Redis哈希槽机制的实现
  • Containerd 简介、安装与使用指南
  • Lineageos 22.1(Android 15) 编译隐藏API的 android.jar
  • DeepSeek 开放平台无法充值 改用其他平台API调用DeepSeek-chat模型方法
  • 代码随想录D50-51 图论 Python
  • AT_dp_u Grouping 题解
  • 猿大师办公助手:高效、安全、兼容的WebOffice在线办公解决方案
  • 【数据分享】1929-2024年全球站点的逐年降雪深度数据(Shp\Excel\免费获取)
  • oss做静态网站/企业网络推广的方法
  • 建设银网官方网站/seo搜索引擎优化就业指导
  • glitch做网站/青岛seo计费
  • 域名注册的网站有哪些/百度手机关键词排名工具
  • 记事本做网站怎么改字体颜色/百度seo 优化
  • 北京 网站建设公司/seo网站内部优化方案