Fastapi + vue3 自动化测试平台(5)-- 封装树形结构列表生成器
使用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 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)
代码解析
-
模型定义:
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-treeref="step_treeRef" :data="树结构" :props="defaultProps"default-expand-all >
</tree>
总结
通过封装create_tree函数,我们可以轻松生成树形结构,并支持动态选择字段。这种方法适用于各种层级数据的场景,如菜单、分类、组织结构等。结合FastAPI和Tortoise ORM,能够快速构建高效的Web服务。
希望本文对你有所帮助!如果有任何问题或建议,欢迎在评论区交流讨论。🚀
相关文章:
Fastapi + vue3 自动化测试平台(5)-- 封装树形结构列表生成器
使用FastAPI封装树形结构生成函数:高效处理层级数据 在Web开发中,树形结构是一种常见的数据组织形式,常用于菜单、分类、组织结构等场景。本文将介绍如何使用FastAPI封装一个通用的树形结构生成函数,支持动态选择字段,…...
【项目实战】日志管理和异步任务处理系统
这是一个高效的日志管理和异步任务处理系统,提供了多级别的日志记录、灵活的日志格式化和多种日志输出目标(控制台、文件、文件滚动)。通过异步任务循环器和线程安全的任务队列,系统能够在高并发环境下处理任务,同时避…...
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 第一期开源有奖活动正式开启 !
为了促进开源社区的交流与成长,字节跳动开源的多媒体处理框架 BabitMF (GitHub - BabitMF/bmf: Cross-platform, customizable multimedia/video processing framework. With strong GPU acceleration, heterogeneous design, multi-language support, e…...
项目管理十大领域是哪些
项目管理的十大领域包括:整合管理、范围管理、时间管理、成本管理、质量管理、人力资源管理、沟通管理、风险管理、采购管理、干系人管理。这些领域构成了一个完整的项目管理框架,每个领域都扮演着至关重要的角色,帮助项目经理有效管理项目的…...
期权帮|股指期货的有效止盈止损策略?
锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 股指期货的有效止盈止损策略? 一、股指期货止盈策略 (1)固定比例止盈:设定盈利百分比目标,达则止盈。优点:简单&am…...
PCL 基于视椎体裁剪点云
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 基于视椎体裁剪点云,是指根据给定的视锥体(Frustum)参数,剔除视锥体外的点,只保留视锥体内的点。这在三维渲染、点云分割和场景分析中非常有用。如下图所示: 二、实现代码 // 标准文件 #include <iostrea…...
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
Mapper(componentModel MappingConstants.ComponentModel.SPRING) 是 **MapStruct** 框架中的一个注解,用于生成基于 Spring 的映射器(Mapper)实现类。MapStruct 是一个代码生成器,用于简化 Java Bean 之间的映射(如 …...
LabVIEW 中的 3dgraph.llb 库
3dgraph.llb 库位于 C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform 目录下,是 LabVIEW 系统中用于 3D 图形相关操作的重要库。它为 LabVIEW 用户提供了丰富的功能,能在应用程序中创建、显示和交互各种 3D 图形,…...
【PHP】php+mysql 活动信息管理系统(源码+论文+数据库+数据库文件)【独一无二】
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 【PHP】php 活动信息管理系统(源码论文…...
qt QOpenGLTexture详解
1. 概述 QOpenGLTexture 是 Qt5 提供的一个类,用于表示和管理 OpenGL 纹理。它封装了 OpenGL 纹理的创建、分配存储、绑定和设置像素数据等操作,简化了 OpenGL 纹理的使用。 2. 重要函数 构造函数: QOpenGLTexture(const QImage &image,…...
【时间复杂度和空间复杂度】
常见的时间复杂度 计算方法1、确定输入规模: 输入规模通常用 n 表示,例如数组长度、链表长度等。2、分析算法的执行步骤: 计算每个操作的执行次数。 确定操作的执行次数与输入规模的关系。3、忽略常数和低阶项: 在大O表示法中&am…...
王炸 用AI+飞书 分解 一键生成 项目计划表模版
效果图: 各字段设置: 以下是一个使用 AI(DeepSeeker) 飞书多维表格分解项目待办模板的示例,你可以根据实际情况进行调整和优化: 列表中需要选择对象,且选择输出结果(记得控制字符长度…...
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:jstack线程转储发现,有几万个线程,查看代码发现,线程池放在方法内部或者循环体中创建,尽管方法…...
[qt5学习笔记]Application Example示例程序源码解析
开发环境问题 vs2022下直接打开ui、ts文件失败 解决办法如下图, 设置designer独立运行。估计是嵌入运行存在些许bug。 同理,ts编辑工具linguist也存在这个问题。 qrc rc的编辑嵌入编辑都正常,但分离式更稳定可靠。 qt creator编译失败 原…...
【在时光的棋局中修行——论股市投资的诗意哲学】
在时光的棋局中修行——论股市投资的诗意哲学 引子:数字之海与星辰之约 在经纬交织的K线图里,我常看见银河倾泻的轨迹。那些跳动的数字如同繁星坠落,在午夜时分编织着财富的密码。炒股之道,是理性与诗意的交响,是数据…...
IB网络错误检查工具ibqueryerrors
ibqueryerrors 是一个用于查询 InfiniBand 网络中错误统计信息的工具。它可以帮助网络管理员识别和诊断网络问题,如丢包、重传和其他通信错误。这个工具通常是 InfiniBand 管理软件包的一部分,例如 OpenSM(Open Subnet Manager)。…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
