当前位置: 首页 > 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 fieldsapp = 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'] = childrentree.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 uvicornuvicorn.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-treeref="step_treeRef" :data="树结构" :props="defaultProps"default-expand-all >
</tree>

总结

通过封装create_tree函数,我们可以轻松生成树形结构,并支持动态选择字段。这种方法适用于各种层级数据的场景,如菜单、分类、组织结构等。结合FastAPI和Tortoise ORM,能够快速构建高效的Web服务。

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

相关文章:

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

使用FastAPI封装树形结构生成函数&#xff1a;高效处理层级数据 在Web开发中&#xff0c;树形结构是一种常见的数据组织形式&#xff0c;常用于菜单、分类、组织结构等场景。本文将介绍如何使用FastAPI封装一个通用的树形结构生成函数&#xff0c;支持动态选择字段&#xff0c…...

【项目实战】日志管理和异步任务处理系统

这是一个高效的日志管理和异步任务处理系统&#xff0c;提供了多级别的日志记录、灵活的日志格式化和多种日志输出目标&#xff08;控制台、文件、文件滚动&#xff09;。通过异步任务循环器和线程安全的任务队列&#xff0c;系统能够在高并发环境下处理任务&#xff0c;同时避…...

CViewState::InitializeColumns函数分析之_hdsaColumnStates的结构

CViewState::InitializeColumns函数分析之_hdsaColumnStates的结构 // Set up saved column state only if the saved state // contains information other than "nothing". if (_hdsaColumnStates) { UINT cStates DSA_GetItemCount(_hdsaColumnS…...

WPF-数据转换器

一、单值转换器 1.不传参数 转换器 当Value值大于100时返回红色 public class DataConverter : IValueConverter{/// <summary>/// 表示从源到目标数据转换/// </summary>/// <param name"value">数据源的值</param>/// <param name&q…...

09 解决方案 - 开源机器人+具身智能+AI

开源机器人、具身智能(Embodied Intelligence)以及AI技术的结合,可以为机器人领域带来全新的解决方案。以下是这一结合的可能方向和具体方案: 1. 开源机器人平台 开源机器人平台为开发者提供了灵活的基础架构,可以在此基础上结合具身智能和AI技术。以下是一些常用的开源机…...

2025 BabitMF 第一期开源有奖活动正式开启 !

为了促进开源社区的交流与成长&#xff0c;字节跳动开源的多媒体处理框架 BabitMF &#xff08;GitHub - BabitMF/bmf: Cross-platform, customizable multimedia/video processing framework. With strong GPU acceleration, heterogeneous design, multi-language support, e…...

项目管理十大领域是哪些

项目管理的十大领域包括&#xff1a;整合管理、范围管理、时间管理、成本管理、质量管理、人力资源管理、沟通管理、风险管理、采购管理、干系人管理。这些领域构成了一个完整的项目管理框架&#xff0c;每个领域都扮演着至关重要的角色&#xff0c;帮助项目经理有效管理项目的…...

期权帮|股指期货的有效止盈止损策略?

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 股指期货的有效止盈止损策略? 一、股指期货止盈策略 &#xff08;1&#xff09;固定比例止盈&#xff1a;设定盈利百分比目标&#xff0c;达则止盈。优点&#xff1a;简单&am…...

PCL 基于视椎体裁剪点云

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 基于视椎体裁剪点云,是指根据给定的视锥体(Frustum)参数,剔除视锥体外的点,只保留视锥体内的点。这在三维渲染、点云分割和场景分析中非常有用。如下图所示: 二、实现代码 // 标准文件 #include <iostrea…...

@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)

Mapper(componentModel MappingConstants.ComponentModel.SPRING) 是 **MapStruct** 框架中的一个注解&#xff0c;用于生成基于 Spring 的映射器&#xff08;Mapper&#xff09;实现类。MapStruct 是一个代码生成器&#xff0c;用于简化 Java Bean 之间的映射&#xff08;如 …...

LabVIEW 中的 3dgraph.llb 库

3dgraph.llb 库位于 C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform 目录下&#xff0c;是 LabVIEW 系统中用于 3D 图形相关操作的重要库。它为 LabVIEW 用户提供了丰富的功能&#xff0c;能在应用程序中创建、显示和交互各种 3D 图形&#xff0c;…...

【PHP】php+mysql 活动信息管理系统(源码+论文+数据库+数据库文件)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 【PHP】php 活动信息管理系统&#xff08;源码论文…...

qt QOpenGLTexture详解

1. 概述 QOpenGLTexture 是 Qt5 提供的一个类&#xff0c;用于表示和管理 OpenGL 纹理。它封装了 OpenGL 纹理的创建、分配存储、绑定和设置像素数据等操作&#xff0c;简化了 OpenGL 纹理的使用。 2. 重要函数 构造函数&#xff1a; QOpenGLTexture(const QImage &image,…...

【时间复杂度和空间复杂度】

常见的时间复杂度 计算方法1、确定输入规模&#xff1a; 输入规模通常用 n 表示&#xff0c;例如数组长度、链表长度等。2、分析算法的执行步骤&#xff1a; 计算每个操作的执行次数。 确定操作的执行次数与输入规模的关系。3、忽略常数和低阶项&#xff1a; 在大O表示法中&am…...

王炸 用AI+飞书 分解 一键生成 项目计划表模版

效果图&#xff1a; 各字段设置&#xff1a; 以下是一个使用 AI&#xff08;DeepSeeker&#xff09; 飞书多维表格分解项目待办模板的示例&#xff0c;你可以根据实际情况进行调整和优化&#xff1a; 列表中需要选择对象&#xff0c;且选择输出结果&#xff08;记得控制字符长度…...

VisionMaster4.4 python脚本 图像处理 转换函数 爱之初体验

最近有接触过一丢丢VM4.3的模块开发. 一直有把python图像处理部分模块移植进来的打算 不过时间不够没来得及折腾.偶尔发现4.4支持py脚本 于是拿来折腾.一下午. 发现4.4支持python脚本,好开心. 首先安装VM4.4 注意一定要是4.4 打开后拖了一个模块. 但是发现import numpy imp…...

线程池的使用 + MD5加密 + 枚举类

文章目录 1、线程池的使用2、MD5算法的使用3、多用枚举类 整理下近期干活儿遇到的一些坑。 1、线程池的使用 不合理点1&#xff1a;jstack线程转储发现&#xff0c;有几万个线程&#xff0c;查看代码发现&#xff0c;线程池放在方法内部或者循环体中创建&#xff0c;尽管方法…...

[qt5学习笔记]Application Example示例程序源码解析

开发环境问题 vs2022下直接打开ui、ts文件失败 解决办法如下图&#xff0c; 设置designer独立运行。估计是嵌入运行存在些许bug。 同理&#xff0c;ts编辑工具linguist也存在这个问题。 qrc rc的编辑嵌入编辑都正常&#xff0c;但分离式更稳定可靠。 qt creator编译失败 原…...

【在时光的棋局中修行——论股市投资的诗意哲学】

在时光的棋局中修行——论股市投资的诗意哲学 引子&#xff1a;数字之海与星辰之约 在经纬交织的K线图里&#xff0c;我常看见银河倾泻的轨迹。那些跳动的数字如同繁星坠落&#xff0c;在午夜时分编织着财富的密码。炒股之道&#xff0c;是理性与诗意的交响&#xff0c;是数据…...

IB网络错误检查工具ibqueryerrors

ibqueryerrors 是一个用于查询 InfiniBand 网络中错误统计信息的工具。它可以帮助网络管理员识别和诊断网络问题&#xff0c;如丢包、重传和其他通信错误。这个工具通常是 InfiniBand 管理软件包的一部分&#xff0c;例如 OpenSM&#xff08;Open Subnet Manager&#xff09;。…...

终极KMS激活指南:如何3分钟完成Windows和Office永久免费激活

终极KMS激活指南&#xff1a;如何3分钟完成Windows和Office永久免费激活 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows和Office的激活弹窗而烦恼吗&#xff1f;KMS_VL_ALL_AIO智…...

从零开始使用taotoken python sdk构建你的第一个ai聊天应用

从零开始使用 Taotoken Python SDK 构建你的第一个 AI 聊天应用 1. 注册 Taotoken 并获取 API Key 要开始使用 Taotoken 的 AI 服务&#xff0c;首先需要注册账号并获取 API Key。访问 Taotoken 官方网站完成注册流程。登录后进入控制台&#xff0c;在「API 密钥管理」页面点…...

专业级量化交易回测平台:实战指南与深度解析

专业级量化交易回测平台&#xff1a;实战指南与深度解析 【免费下载链接】backtrader-pyqt-ui 项目地址: https://gitcode.com/gh_mirrors/bac/backtrader-pyqt-ui 在量化交易领域&#xff0c;一个高效、直观的回测平台是策略研发成功的基石。本文将深入探讨基于Backtr…...

从延迟体感看 Taotoken 全球直连与路由能力的稳定性

从延迟体感看 Taotoken 全球直连与路由能力的稳定性 1. 延迟体验的实际观察 在实际开发过程中&#xff0c;通过 Taotoken 平台调用大模型 API 时&#xff0c;延迟表现是开发者最直观的感受之一。我们使用 Python SDK 和 curl 两种方式进行测试&#xff0c;观察请求响应时间。…...

FLORIS风电场仿真架构解密:从尾流模型到控制优化的完整技术栈

FLORIS风电场仿真架构解密&#xff1a;从尾流模型到控制优化的完整技术栈 【免费下载链接】floris A controls-oriented engineering wake model. 项目地址: https://gitcode.com/gh_mirrors/fl/floris 在风电行业快速发展的今天&#xff0c;风电场布局优化与控制策略设…...

基于容器与Seccomp的代码沙盒安全实践:以dify-sandbox为例

1. 项目概述&#xff1a;构建一个安全的代码沙盒环境在构建一个多租户的AI应用平台或在线代码评测系统时&#xff0c;一个核心且棘手的问题是如何安全地执行用户提交的、不可信的代码。直接在生产服务器上运行这些代码无异于敞开大门&#xff0c;恶意代码可以轻易地耗尽系统资源…...

5天AI编程训练营:零基础用Claude Code实现办公自动化

1. 项目概述&#xff1a;面向非技术背景的AI编程入门实战最近在团队内部做了一次很有意思的尝试&#xff1a;用五天时间&#xff0c;每天一小时&#xff0c;让一群完全没有编程背景的同事&#xff0c;从零开始学会用AI工具&#xff08;Claude Code&#xff09;来解决实际工作中…...

如何在Blender中完美处理3MF格式:3D打印文件导入导出终极指南

如何在Blender中完美处理3MF格式&#xff1a;3D打印文件导入导出终极指南 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 如果你是一位3D设计师或3D打印爱好者&#xff0…...

基于MCP协议构建AI记忆系统:从向量检索到生产部署全解析

1. 项目概述&#xff1a;AI记忆系统的核心价值最近在折腾AI应用开发&#xff0c;特别是想让AI助手能记住我们之前的对话&#xff0c;实现更连贯、个性化的交互。这听起来简单&#xff0c;但真做起来&#xff0c;你会发现“记忆”功能是区分一个玩具级AI和一个真正有用助手的关键…...

【计算机网络】第9篇:互联网控制报文协议——ICMP的类型体系与诊断功能

目录 1. ICMP的设计定位 2. 类型体系的形式化分类 3. 差错报文&#xff1a;逐类分析 3.1 目的不可达&#xff08;类型3&#xff09; 3.2 超时&#xff08;类型11&#xff09; 3.3 参数问题&#xff08;类型12&#xff09; 4. 查询报文&#xff1a;诊断工具的协议基础 4.…...