Skip to content

目录结构设计 ​

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

设计原则

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

后端目录结构 ​

src/
├── app.py                       # 应用入口:create_app() 组装中间件、路由、异常处理
├── core/                        # 核心基础设施层
│   ├── __init__.py              # 统一导出
│   ├── database.py              # 数据库引擎:SQLAlchemy 初始化
│   ├── redis_client.py          # Redis 客户端:连接池、Lua 脚本
│   ├── jwt.py                   # JWT 工具:签发 / 解析 / 续签 / 黑名单
│   ├── password.py              # 密码工具:bcrypt 哈希 + 盐值
│   ├── security.py              # 安全工具:get_user_id / get_username / get_realname
│   ├── response.py              # 统一响应:R.ok() / R.failed() / R.page()
│   ├── exceptions.py            # 自定义异常:BizError
│   ├── permission.py            # 权限装饰器:check_permission
│   ├── mail.py                  # 邮件发送
│   └── scheduler.py             # 定时任务调度器
│
├── middleware/                  # HTTP 中间件层
│   ├── __init__.py              # 统一导出
│   ├── auth.py                  # JWT 认证中间件:login_required
│   ├── demo.py                  # 演示模式中间件:check_demo
│   ├── errors.py                # 全局异常处理
│   ├── operation_log.py         # 操作日志中间件
│   └── transaction.py           # AOP 事务管理中间件
│
├── common/                      # 公共模块层
│   ├── __init__.py              # 统一导出
│   ├── base_model.py            # 模型基类:通用字段 + to_dict() 序列化
│   ├── base_db.py               # 数据库操作基类:save() 持久化方法
│   ├── base_repository.py       # 仓库基类:通用 CRUD + 软删除 + 分页
│   ├── base_service.py          # 服务基类:模板方法 CRUD + 差异点钩子
│   ├── forms/                   # 表单基类
│   │   ├── __init__.py          # 统一导出
│   │   ├── base_form.py         # BaseForm 基类
│   │   └── fields.py            # 自定义字段
│   ├── constants/               # 常量与枚举
│   │   ├── __init__.py          # 统一导出
│   │   └── common.py            # 通用常量
│   └── utils/                   # 工具函数
│       ├── __init__.py          # 统一导出
│       ├── captcha.py           # 验证码生成
│       ├── case_converter.py    # 驼峰/下划线互转
│       ├── excel_utils.py       # Excel 导入导出
│       ├── file.py              # 文件工具
│       ├── ip.py                # IP 工具:客户端 IP 提取
│       ├── ip2region.py         # IP 地理位置解析
│       ├── json.py              # JSON 工具
│       ├── model_utils.py       # 模型工具
│       ├── regular.py           # 正则工具
│       ├── request.py           # 请求工具:parse_request_body / parse_batch_ids
│       ├── rich_text.py         # 富文本处理
│       ├── time_utils.py        # 时间工具
│       └── user_agent.py        # User-Agent 解析
│
├── routes/                      # 路由装配层
│   ├── __init__.py              # 统一导出
│   └── v1.py                    # API v1 路由注册中心
│
├── modules/                     # 业务模块层(纯业务逻辑)
│   ├── auth/                    # 认证模块
│   │   ├── router.py            # 登录/登出/验证码/Token 刷新
│   │   ├── schema.py            # 登录表单校验
│   │   └── service.py           # 登录/登出/验证码/锁定逻辑
│   ├── system/                  # 系统管理模块组
│   │   ├── position/            # 岗位管理
│   │   │   ├── models.py        # Position 模型
│   │   │   ├── repository.py    # PositionRepository
│   │   │   ├── schema.py        # PositionForm / PositionStatusForm
│   │   │   ├── service.py       # PositionService
│   │   │   └── router.py        # 路由定义
│   │   ├── level/               # 职级管理(同结构)
│   │   ├── dept/                # 部门管理(支持树形)
│   │   ├── role/                # 角色管理
│   │   ├── menu/                # 菜单管理(支持树形)
│   │   └── user/                # 用户管理(复杂模块)
│   ├── association/             # 关联模块组
│   │   ├── role_menu/           # 角色菜单关联
│   │   └── user_role/           # 用户角色关联
│   ├── dictionary/              # 字典模块组
│   │   ├── dict/                # 字典
│   │   └── dict_item/           # 字典项
│   ├── configuration/           # 配置模块组
│   │   ├── config/              # 配置
│   │   └── config_item/         # 配置项
│   ├── cms/                     # 内容管理模块组
│   │   ├── article/             # 文章管理
│   │   ├── category/            # 文章分类
│   │   └── link/                # 友链管理
│   ├── city/                    # 城市/行政区划
│   ├── notice/                  # 通知公告
│   ├── param/                   # 参数管理
│   ├── job/                     # 定时任务(含调度器)
│   ├── job_log/                 # 任务执行日志
│   ├── login_log/               # 登录日志
│   ├── operation_log/           # 操作日志
│   ├── upload/                  # 文件上传
│   ├── file_template/           # 文件模板
│   ├── generator/               # 代码生成器
│   └── example/                 # 案例演示
│
├── models_registry.py           # 模型注册表
│
└── migrations/                  # Flask-Migrate 迁移
    ├── env.py                   # 迁移环境配置
    └── versions/                # 迁移版本文件
        └── 0001_baseline.py     # 基线迁移

目录设计意图 ​

目录设计意图
core/基础设施层,提供所有模块共用的工具和配置。不包含业务逻辑
middleware/中间件独立于 core,职责单一,便于按需注册和测试
common/公共模块层,提供基类、常量和工具函数
routes/路由装配层,将所有模块的 Blueprint 集中注册
modules/业务模块层,按功能域分组(system / dictionary / configuration / cms),每个模块包含 models + repository + schema + service + router
modules/{group}/模块组:将关联模块归组(如 system 下的 user / role / menu / dept)

前端目录结构 ​

ui/src/
├── main.ts         # 应用入口
├── App.vue         # 根组件
├── api/            # API 接口层(按后端模块对应)
│   ├── system/     # 系统管理 API
│   │   ├── position.ts  # 岗位管理 API
│   │   ├── level.ts     # 职级管理 API
│   │   ├── dept.ts      # 部门管理 API
│   │   ├── role.ts      # 角色管理 API
│   │   ├── menu.ts      # 菜单管理 API
│   │   └── user.ts      # 用户管理 API
│   ├── content/    # 内容管理 API
│   │   ├── article.ts   # 文章管理 API
│   │   ├── category.ts  # 文章分类 API
│   │   ├── notice.ts    # 通知公告 API
│   │   └── link.ts      # 友链管理 API
│   ├── data/       # 数据管理 API
│   │   ├── dict.ts      # 字典管理 API
│   │   ├── config.ts    # 配置管理 API
│   │   └── param.ts     # 参数管理 API
│   ├── common/     # 公共 API
│   │   └── index.ts     # 登录/登出/验证码
│   ├── dashboard/  # 仪表盘 API
│   ├── file/       # 文件管理 API
│   ├── monitor/    # 监控 API
│   ├── region/     # 行政区划 API
│   ├── setting/    # 设置 API
│   └── tool/       # 工具 API
│
├── views/          # 页面视图(按功能域分组)
│   ├── login/      # 登录页
│   ├── dashboard/  # 仪表盘
│   ├── system/     # 系统管理页面
│   │   ├── position/  # 岗位管理页面
│   │   ├── level/     # 职级管理页面
│   │   ├── dept/      # 部门管理页面
│   │   ├── role/      # 角色管理页面
│   │   ├── menu/      # 菜单管理页面
│   │   └── user/      # 用户管理页面
│   ├── content/    # 内容管理页面
│   ├── data/       # 数据管理页面
│   ├── monitor/    # 监控页面
│   ├── setting/    # 设置页面
│   ├── tool/       # 工具页面
│   ├── file/       # 文件管理页面
│   ├── exception/  # 异常页面(404/403/500)
│   ├── about/      # 关于页面
│   ├── iframe/     # 内嵌页面
│   └── redirect/   # 重定向页面
│
├── components/     # 全局公共组件
│   ├── Table/      # 表格组件
│   ├── Form/       # 表单组件
│   ├── Modal/      # 弹窗组件
│   ├── Upload/     # 上传组件
│   ├── Editor/     # 富文本编辑器
│   ├── Excel/      # Excel 导入导出
│   ├── Select/     # 选择器组件
│   ├── Cropper/    # 图片裁剪
│   ├── Qrcode/     # 二维码
│   ├── Page/       # 分页组件
│   ├── Password/   # 密码组件
│   ├── Authority/  # 权限组件
│   ├── CheckToken/ # Token 检查
│   ├── ChinaArea/  # 中国行政区划
│   ├── Websocket/  # WebSocket 组件
│   ├── Lockscreen/ # 锁屏
│   ├── CountTo/    # 数字动画
│   ├── Render/     # 自定义渲染
│   ├── Application/# 应用组件
│   ├── Region/     # 区域选择
│   ├── TableSelect/# 表格选择
│   ├── icon/       # 图标组件
│   ├── importFile/ # 文件导入
│   ├── numberInput/# 数字输入
│   └── pagination/ # 分页组件
│
├── store/          # Pinia 状态管理
│   └── modules/    # 状态模块
│       ├── user.ts       # 用户状态(Token/用户信息/权限)
│       ├── app.ts        # 应用状态(主题/布局/语言)
│       ├── permission.ts # 权限状态(动态路由)
│       ├── tabs.ts       # 标签页状态
│       └── dict.ts       # 字典缓存
│
├── router/         # Vue Router 路由
│   ├── index.ts    # 路由配置入口
│   └── menus/      # 菜单路由
│
├── hooks/          # Composition API Hooks
│   ├── core/       # 核心 Hooks
│   ├── event/      # 事件 Hooks
│   ├── setting/    # 设置 Hooks
│   └── web/        # Web Hooks
│
├── layout/         # 布局组件
│   └── components/ # 布局子组件(侧边栏/头部/标签页)
│
├── directives/     # 自定义指令
├── enums/          # 前端枚举
├── plugins/        # 插件
├── settings/       # 应用设置
├── styles/         # 全局样式
│   ├── theme/      # 主题样式
│   └── transition/ # 过渡动画
├── utils/          # 工具函数
│   ├── http/       # Axios 封装
│   ├── file/       # 文件工具
│   ├── helper/     # 辅助函数
│   ├── is/         # 类型判断
│   └── lib/        # 第三方库封装
└── assets/         # 静态资源
    ├── icons/      # 图标
    └── images/     # 图片

前后端目录对应关系 ​

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

目录规范 ​

目录命名规范

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

总结 ​

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

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