Skip to content

目录结构设计

本章详细说明项目目录结构设计,包括后端 src/ 和前端 ui/src/ 的完整目录树及各目录的设计意图。

设计原则

目录结构遵循「按功能分组、按职责分层」的原则。后端 src/ 按技术层次组织(config / core / common / api / modules),前端 ui/src/ 按功能领域组织(api / views / components / store)。每个目录有明确的边界和单一职责。

后端目录结构

src/
├── app.py                        // 应用工厂
├── bootstrap.py                  // 启动引导

├── config/                       // 配置模块
│   ├── __init__.py
│   ├── app.py                    //   应用基础配置
│   ├── auth.py                   //   JWT 与登录安全配置
│   ├── captcha.py                //   验证码配置
│   ├── database.py               //   数据库配置
│   ├── email.py                  //   邮件配置
│   ├── logging.py                //   日志配置
│   └── redis.py                  //   Redis 配置

├── core/                         // 核心基础设施
│   ├── __init__.py
│   ├── base_handler.py           //   请求处理器基类
│   ├── base_model.py             //   ORM 模型基类
│   ├── base_repository.py        //   通用 Repository 基类
│   ├── base_service.py           //   通用 Service 基类
│   ├── base_schema.py            //   通用 Schema 基类
│   ├── context.py                //   上下文变量
│   ├── database.py               //   数据库引擎与会话管理
│   ├── exceptions.py             //   异常体系
│   ├── jwt.py                    //   JWT 令牌处理
│   ├── logger.py                 //   日志配置
│   ├── metrics.py                //   性能指标
│   ├── password.py               //   密码加密工具
│   ├── redis.py                  //   Redis 客户端
│   ├── response.py               //   统一响应封装
│   └── tracer.py                 //   链路追踪

├── common/                       // 公共模块
│   ├── __init__.py
│   ├── permission.py             //   权限解析
│   ├── middleware/                //   中间件
│   │   ├── __init__.py
│   │   ├── access_decorators.py  //     访问控制装饰器
│   │   ├── authentication.py     //     认证中间件
│   │   ├── cors.py               //     跨域处理
│   │   ├── login_log.py          //     登录日志装饰器
│   │   ├── metrics.py            //     请求指标中间件
│   │   ├── operation_log.py      //     操作日志装饰器
│   │   └── trace_id.py           //     链路追踪中间件
│   └── utils/                    //   工具函数
│       ├── __init__.py
│       ├── captcha.py            //     验证码工具
│       ├── crypto.py             //     密码加密工具
│       ├── dict_util.py          //     数据字典工具
│       ├── file.py               //     文件工具
│       ├── helpers.py            //     通用工具函数
│       ├── ip2region.py          //     IP 地理位置解析
│       ├── rich_text.py          //     富文本处理
│       └── validators.py         //     校验工具

├── modules/                      // 业务模块
│   ├── __init__.py
│   ├── auth/                     //   认证模块
│   ├── user/                     //   用户管理
│   ├── role/                     //   角色管理
│   ├── menu/                     //   菜单管理
│   ├── dept/                     //   部门管理
│   ├── position/                 //   岗位管理
│   ├── level/                    //   职级管理
│   ├── dict/                     //   字典管理
│   ├── dict_item/                //   字典项管理
│   ├── config/                   //   系统配置
│   ├── config_item/              //   配置项管理
│   ├── notice/                   //   通知公告
│   ├── link/                     //   友情链接
│   ├── category/                 //   分类管理
│   ├── article/                  //   文章管理
│   ├── param/                    //   参数管理
│   ├── city/                     //   城市级联
│   ├── file_template/            //   文件模板
│   ├── job/                      //   定时任务
│   ├── job_log/                  //   任务日志
│   ├── upload/                   //   文件上传
│   ├── login_log/                //   登录日志
│   ├── operation_log/            //   操作日志
│   ├── user_role/                //   用户角色关联
│   ├── role_menu/                //   角色菜单关联
│   ├── example/                  //   示例模块
│   └── generator/                //   代码生成器

├── api/                          // API 路由定义
│   ├── __init__.py
│   └── v1/                       //   v1 版本路由
│       ├── __init__.py
│       ├── router.py             //     路由聚合
│       ├── auth.py               //     认证路由
│       ├── index.py              //     首页路由
│       ├── upload.py             //     上传路由
│       ├── user.py               //     用户路由
│       ├── role.py               //     角色路由
│       ├── menu.py               //     菜单路由
│       ├── dept.py               //     部门路由
│       ├── position.py           //     岗位路由
│       ├── level.py              //     职级路由
│       ├── dict.py               //     字典路由
│       ├── dict_item.py          //     字典项路由
│       ├── config.py             //     配置路由
│       ├── config_item.py        //     配置项路由
│       ├── city.py               //     城市路由
│       ├── notice.py             //     公告路由
│       ├── link.py               //     友链路由
│       ├── category.py           //     分类路由
│       ├── article.py            //     文章路由
│       ├── param.py              //     参数路由
│       ├── file_template.py      //     文件模板路由
│       ├── job.py                //     定时任务路由
│       ├── job_log.py            //     任务日志路由
│       ├── generator.py          //     代码生成器路由
│       ├── operation_log.py      //     操作日志路由
│       ├── login_log.py          //     登录日志路由
│       └── example.py            //     示例路由

├── extensions/                   // 扩展注册
│   ├── __init__.py               //   扩展初始化
│   ├── sqlalchemy.py             //   数据库扩展
│   ├── redis.py                  //   Redis 扩展
│   ├── swagger.py                //   Swagger 占位
│   └── sentry.py                 //   Sentry 占位

└── constants/                    // 常量定义
    └── __init__.py               //   常量定义

目录设计意图

目录设计意图
config/配置按功能拆分子模块,统一从 .env 加载,避免单一大文件
core/基础设施层,提供所有模块共用的基类、工具和配置。不包含业务逻辑
common/middleware/中间件独立于 core,职责单一,便于按需注册和测试
common/utils/工具函数按功能拆分,提供密码、文件、缓存等通用能力
api/v1/路由装配层,将所有模块的 Handler 集中注册,便于查看全量 API
modules/业务模块层,每个模块包含 handlers + schemas + service + repository + models
extensions/扩展注册,导出 SQLAlchemy/Redis 等单例,供全项目使用
constants/常量独立管理,避免硬编码散落各处

前端目录结构

ui/src/
├── main.ts                       // 入口文件
├── App.vue                       // 根组件
├── api/                          // API 接口定义
│   ├── system/                   //   系统管理接口
│   ├── content/                  //   内容管理接口
│   ├── data/                     //   数据管理接口
│   ├── monitor/                  //   监控管理接口
│   ├── tool/                     //   工具接口
│   ├── file/                     //   文件接口
│   ├── region/                   //   地区接口
│   ├── setting/                  //   设置接口
│   ├── dashboard/                //   仪表盘接口
│   └── common/                   //   公共接口
├── views/                        // 页面视图
│   ├── login/                    //   登录页
│   ├── dashboard/                //   仪表盘
│   ├── system/                   //   系统管理页面
│   ├── content/                  //   内容管理页面
│   ├── data/                     //   数据管理页面
│   ├── monitor/                  //   监控管理页面
│   ├── file/                     //   文件管理页面
│   ├── tool/                     //   工具页面
│   ├── setting/                  //   设置页面
│   ├── exception/                //   异常页面
│   └── about/                    //   关于页面
├── components/                   // 公共组件
│   ├── Table/                    //   表格组件
│   ├── Form/                     //   表单组件
│   ├── Modal/                    //   弹窗组件
│   ├── Upload/                   //   上传组件
│   ├── Editor/                   //   富文本编辑器
│   ├── Excel/                    //   Excel 导入导出
│   ├── Select/                   //   选择器组件
│   ├── Cropper/                  //   图片裁剪
│   ├── Qrcode/                   //   二维码
│   ├── Page/                     //   分页组件
│   ├── Password/                 //   密码组件
│   ├── Authority/                //   权限组件
│   ├── ChinaArea/                //   中国行政区划
│   ├── Lockscreen/               //   锁屏
│   ├── CountTo/                  //   数字动画
│   ├── Render/                   //   自定义渲染
│   ├── Region/                   //   区域选择
│   ├── TableSelect/              //   表格选择
│   ├── icon/                     //   图标组件
│   ├── importFile/               //   文件导入
│   ├── numberInput/              //   数字输入
│   └── pagination/               //   分页组件
├── store/                        // 状态管理
│   ├── index.ts                  //   Store 入口
│   └── modules/                  //   状态模块
├── router/                       // 路由配置
│   ├── index.ts                  //   路由实例
│   └── menus/                    //   菜单路由
├── hooks/                        // 组合式函数
│   ├── core/                     //   核心 hooks
│   ├── event/                    //   事件 hooks
│   ├── setting/                  //   设置 hooks
│   └── web/                      //   Web hooks
├── layout/                       // 布局组件
│   └── components/               //   布局子组件
├── directives/                   // 自定义指令
├── enums/                        // 前端枚举
├── plugins/                      // 插件注册
├── settings/                     // 应用设置
├── styles/                       // 全局样式
├── utils/                        // 工具函数
│   ├── http/                     //   Axios 封装
│   ├── auth.ts                   //   Token 管理
│   ├── dateUtil.ts               //   日期格式化
│   ├── downloadFile.ts           //   文件下载
│   ├── validate.ts               //   表单校验
│   └── Storage.ts                //   本地存储
└── assets/                       // 静态资源
    ├── icons/                    //   图标
    └── images/                   //   图片

前后端目录对应关系

前端目录后端目录说明
api/system/position.tsapi/v1/position.pyAPI 接口定义一一对应
views/system/position/modules/position/页面视图对应业务模块
store/modules/user.tsmodules/auth/service.py用户状态对应认证服务
components/common/utils/ + core/公共组件对应后端工具

目录规范

目录命名规范

  1. 后端:目录名使用小写下划线(snake_case),与 Python 模块命名一致
  2. 前端:目录名使用小写 kebab-case 或 camelCase,与 Vue 生态习惯一致
  3. 模块文件:每个模块固定包含 handlers.py / schemas.py / service.py / repository.py / models.py 五个文件
  4. 路由文件:每个模块在 api/v1/ 下对应一个路由文件,导出 routes 列表

总结

目录结构是项目可维护性的基础。后端按技术层次(config / core / common / api / modules)组织,前端按功能领域(api / views / components / store)组织。每个目录有明确的边界和单一职责,模块内部遵循固定的文件结构(handlers + schemas + service + repository + models)。这种设计使得新开发者能快速定位代码,新模块能按既定模式快速创建。

小蚂蚁云团队 · 提供技术支持