企业级FastAPI后端模板搭建(五)初始化数据 搭建文件结构创建core/insert_data.py文件代码如下fromlogimportloggerasyncdefinit_dept():logger.info( 开始新增部门...)asyncdefinit_superuser():logger.info( 开始初始化超级管理员用户...)asyncdefinit_menus():logger.info( 开始初始化系统菜单...)asyncdefinit_apis():logger.info( 开始初始化API数据...)asyncdefinit_roles():logger.info( 开始初始化用户角色...)asyncdefinit_insert_data():awaitinit_dept()awaitinit_superuser()awaitinit_menus()awaitinit_apis()awaitinit_roles()修改core/init_app.py文件from.insert_dataimportinit_insert_data ···asyncdefinit_data():logger.info( 系统初始化开始...)logger.info( 开始数据库初始化和迁移...)awaitinit_db()logger.info(✅ 数据库初始化完成)awaitinit_insert_data()logger.info( 系统初始化完成)初始化部门数据frommodels.adminimportDept...asyncdefinit_dept():logger.info( 开始新增部门...)deptsawaitDept.exists()ifnotdepts:awaitDept.create(name研发部门,codeYFBM,parent_id0,tree_path0,sort1,)logger.info(✅ 部门创建成功 - 部门: 研发部门)else:logger.info(ℹ️ 部门已存在跳过创建)运行之后数据库会添加对应数据初始化超级管理员用户frommodels.adminimportDept,User...asyncdefinit_superuser():logger.info( 开始初始化超级管理员用户...)userawaitUser.exists()ifnotuser:awaitUser.create(accountadmin,username超级管理员,emailadminadmin.com,passwordabcd1234,dept_id1,is_activeTrue,is_superuserTrue,)logger.info(✅ 超级管理员用户创建成功 - 用户名: admin)else:logger.info(ℹ️ 超级管理员用户已存在跳过创建)运行之后数据库会添加对应数据初始化系统菜单frommodels.adminimportDept,User,Menufromschemas.menusimportMenuType...asyncdefinit_menus():logger.info( 开始初始化系统菜单...)menusawaitMenu.exists()ifnotmenus:parent_menuawaitMenu.create(typeMenuType.CATALOG,title系统管理,path/system,sort1,parent_id0,visibleTrue,componentLayout,keep_aliveFalse,redirect/system/user,)children_menu[Menu(typeMenuType.MENU,title用户管理,pathuser,sort1,parent_idparent_menu.id,visibleTrue,componentsystem/user/index,keep_aliveFalse,),Menu(typeMenuType.MENU,title角色管理,pathrole,sort2,parent_idparent_menu.id,visibleTrue,componentsystem/role/index,keep_aliveFalse,),Menu(typeMenuType.MENU,title菜单管理,pathmenu,sort3,parent_idparent_menu.id,visibleTrue,componentsystem/menu/index,keep_aliveFalse,),Menu(typeMenuType.MENU,titleAPI管理,pathapi,sort4,parent_idparent_menu.id,visibleTrue,componentsystem/api/index,keep_aliveFalse,),Menu(typeMenuType.MENU,title部门管理,pathdept,sort5,parent_idparent_menu.id,visibleTrue,componentsystem/dept/index,keep_aliveFalse,),Menu(typeMenuType.MENU,title操作日志,pathlog,sort6,parent_idparent_menu.id,visibleTrue,componentsystem/log/index,keep_aliveFalse,),]awaitMenu.bulk_create(children_menu)logger.info(✅ 系统菜单初始化成功 - 菜单数量: 7)else:logger.info(ℹ️ 系统菜单已存在跳过初始化)运行之后数据库会添加对应数据初始化APIfrommodels.adminimportDept,User,Menu,Apifromfastapi.routingimportAPIRoute...asyncdefinit_apis():logger.info( 开始初始化API数据...)apisawaitApi.exists()ifnotapis:frommainimportapp routesapp.routesforrouteinroutes:ifisinstance(route,APIRoute):methodlist(route.methods)[0]pathroute.path_format summaryroute.summary tagslist(route.tags)[0]awaitApi.create(**dict(methodmethod,pathpath,summarysummary,tagstags,))else:api_countawaitApi.all().count()logger.info(fℹ️ API数据已存在跳过初始化 - 当前API数量:{api_count})运行之后数据库会添加对应数据初始化用户角色frommodels.adminimportDept,User,Menu,Api,Rolefromtortoise.expressionsimportQ...asyncdefinit_roles():logger.info( 开始初始化用户角色...)rolesawaitRole.exists()ifnotroles:admin_roleawaitRole.create(name系统管理员,codeADMIN,sort1,desc系统管理员,)user_roleawaitRole.create(name普通用户,codeGUEST,sort2,desc普通用户,)# 分配所有API给管理员角色all_apisawaitApi.all()awaitadmin_role.apis.add(*all_apis)# 分配所有菜单给管理员和普通用户all_menusawaitMenu.all()awaitadmin_role.menus.add(*all_menus)awaituser_role.menus.add(*all_menus)# 为普通用户分配基本APIbasic_apisawaitApi.filter(Q(method__in[GET])|Q(tags基础模块))awaituser_role.apis.add(*basic_apis)logger.info(✅ 用户角色初始化成功 - 角色: 管理员, 普通用户)else:role_countawaitRole.all().count()logger.info(fℹ️ 用户角色已存在跳过初始化 - 当前角色数量:{role_count})运行之后数据库会添加对应数据sys_role表sys_role_api表sys_role_menu表

相关新闻

最新新闻

从外挂模块到内置蓝牙MCU:工业设备BLE开发全攻略

从外挂模块到内置蓝牙MCU:工业设备BLE开发全攻略

最近把一个工业设备监测终端从“STM32F103 串口蓝牙透传模块”的老方案,整体切换到了一颗内置BLE射频的Cortex-M33内核MCU上。这个过程比预想的要复杂,但也比预想的收获大。以前觉得蓝牙就是“串口转无线”,把模块一挂、AT指令一配就完事&am…

2026/8/28 5:24:38
Python模拟抛硬币实验:可视化大数定律与频率收敛过程

Python模拟抛硬币实验:可视化大数定律与频率收敛过程

1. 项目概述:从“抛硬币”到理解概率的本质“抛硬币”可能是我们最早接触到的概率实验。一枚均匀的硬币,正面和反面出现的概率理论上各占50%。但在实际操作中,你抛10次,可能得到7次正面、3次反面;抛100次,结…

2026/8/28 5:24:38
线性规划实战:从核心原理到MATLAB求解与资源优化

线性规划实战:从核心原理到MATLAB求解与资源优化

1. 从一道题开始:线性规划到底是什么?如果你正在准备数学建模竞赛,或者在工作中需要处理资源分配、生产计划、成本优化这类问题,那么“线性规划”这个词你肯定绕不过去。我第一次接触它,是在大学的一门运筹学课上&…

2026/8/28 5:24:38
YY/T 0681.15-2019无菌医疗器械运输容器和系统性能验证方案(模板)

YY/T 0681.15-2019无菌医疗器械运输容器和系统性能验证方案(模板)

YY/T 0681.15-2019无菌医疗器械运输容器和系统性能验证方案1 方案目的模拟无菌医疗器械成品包装在仓储、搬运、运输、分销全过程中的力学与环境载荷,验证运输包装及内包装系统的防护能力,确保经过标准运输模拟试验后,产品外包装、内包装、无菌…

2026/8/28 5:24:38
模糊综合评判法:从定性到定量的科学决策指南

模糊综合评判法:从定性到定量的科学决策指南

1. 从“差不多”到“算得清”:为什么我们需要模糊综合评判在项目评审、人才选拔、产品评估这些日常工作中,我们常常会遇到一个头疼的问题:如何给一个复杂的事物下一个定论?比如,要评价一个软件工程师,我们会…

2026/8/28 5:24:38
腾讯混元Hy ASR 3.0 Preview:选型评估与工程落地指南

腾讯混元Hy ASR 3.0 Preview:选型评估与工程落地指南

最近在做一个客服录音质检项目,ASR 选型是绕不开的一环。没接触过的人可能觉得,语音识别就是把声音转成文字,难度不大。但真正跑到工程落地就会发现,普通话标准、环境安静、单人说话的理想条件只是少数情况。真实业务里&#xff0…

2026/8/28 5:19:38