236 lines
15 KiB
Markdown
236 lines
15 KiB
Markdown
## 目录说明
|
||
|
||
在软件开发过程中,优秀的软件目录结构对于项目的组织、开发、维护和扩展至关重要,合理的目录结构能够显著提升开发效率和代码可维护性。
|
||
|
||
```
|
||
1. 清晰的层次结构:按照功能模块划分目录,方便团队成员快速定位代码。
|
||
2. 模块化管理:通过多模块结构,实现功能模块的独立管理,提高系统的可维护性和扩展性。
|
||
3. 分层架构:HTTP 层、业务层、数据层分离,职责清晰。
|
||
4. 提升开发效率:清晰的目录结构和模块划分,减少查找代码的时间,提高开发效率。
|
||
```
|
||
|
||
## 项目根目录
|
||
|
||
```
|
||
├── src/ // 后端源码
|
||
├── ui/ // 前端源码(Vue3 + ElementPlus)
|
||
├── config/ // 配置文件(base / database / redis / auth)
|
||
├── docker/ // Docker 部署配置(Dockerfile / docker-compose.yml)
|
||
├── document/ // 项目文档(SQL脚本、迁移日志等)
|
||
├── migrations/ // Alembic 数据库迁移脚本
|
||
├── scripts/ // 脚本工具(setup_db / migrate_db 等)
|
||
├── tests/ // 测试代码(contract / unit / integration)
|
||
├── wiki/ // VitePress 文档站点
|
||
├── static/ // 静态资源(验证码字体等)
|
||
├── uploads/ // 上传文件存储目录
|
||
├── app.py // 后端启动入口
|
||
├── gunicorn.conf.py // Gunicorn 生产环境配置
|
||
├── generator.py // 代码生成器 CLI 入口
|
||
├── config.json // 代码生成器配置
|
||
├── .env.example // 环境变量模板
|
||
├── .env // 环境变量(不提交到版本控制)
|
||
├── Makefile // 快捷命令(db-init、migrate-*、db-migrate)
|
||
├── pyproject.toml // 项目元数据与工具配置
|
||
├── requirements.txt // Python 依赖清单
|
||
├── requirements-dev.txt // 开发依赖清单
|
||
├── .flake8 // Flake8 代码检查配置
|
||
├── .pre-commit-config.yaml // Pre-commit 钩子配置
|
||
├── .dockerignore // Docker 构建忽略规则
|
||
└── README.md // 项目说明
|
||
```
|
||
|
||
## 后端目录 (src/)
|
||
|
||
```
|
||
src/
|
||
├── app.py // 应用工厂(create_app())
|
||
├── extensions.py // Flask 扩展注册
|
||
├── models_registry.py // 模型注册中心(Flask-Migrate 全量识别)
|
||
├── core/ // 核心基础设施(与业务无关)
|
||
│ ├── database.py // SQLAlchemy 引擎 / db 实例
|
||
│ ├── redis_client.py // Redis 同步客户端
|
||
│ ├── jwt.py // JWT 签发 / 解析 / 刷新 / 黑名单
|
||
│ ├── password.py // bcrypt 密码加密 / 校验
|
||
│ ├── response.py // R.ok() / R.failed() 统一响应
|
||
│ ├── exceptions.py // BizError 业务异常
|
||
│ ├── security.py // get_user_id() / get_username() / get_realname()
|
||
│ ├── permission.py // @check_permission 装饰器
|
||
│ ├── scheduler.py // 定时任务调度器管理
|
||
│ └── mail.py // 邮件发送
|
||
├── common/ // 公共组件
|
||
│ ├── base_model.py // ORM 基类(id / create_time / is_delete 等公共字段)
|
||
│ ├── base_db.py // save() / save_all() 方法(flush 不 commit)
|
||
│ ├── base_repository.py // 通用 Repository 基类(CRUD / 分页 / 软删过滤)
|
||
│ ├── base_service.py // 通用 Service 基类(模板方法 + 覆写钩子)
|
||
│ ├── forms/ // 表单校验
|
||
│ │ ├── base_form.py // BaseForm(WTForms 基类,含 ArrayField 处理)
|
||
│ │ └── fields.py // 自定义字段(ArrayField)
|
||
│ ├── constants/ // 常量定义
|
||
│ │ └── common.py // PAGE_SIZE / DEFAULT_PASSWORD 等
|
||
│ └── utils/ // 工具函数
|
||
│ ├── request.py // parse_request_body / parse_batch_ids / parse_batch_ids
|
||
│ ├── captcha.py // 验证码生成(Pillow)
|
||
│ ├── file.py // 文件工具
|
||
│ ├── ip.py // IP 地址获取
|
||
│ ├── ip2region.py // IP 地理位置解析
|
||
│ ├── user_agent.py // User-Agent 解析
|
||
│ ├── rich_text.py // 富文本 XSS 过滤 + 文件迁移
|
||
│ ├── case_converter.py // camelCase <-> snake_case 转换
|
||
│ ├── model_utils.py // model_to_dict / models_to_list
|
||
│ ├── regular.py // WTForms 错误提取
|
||
│ ├── json.py // 自定义 JSON 编码器
|
||
│ ├── excel_utils.py // Excel 导入导出工具
|
||
│ └── time_utils.py // 时间工具
|
||
├── middleware/ // 中间件
|
||
│ ├── __init__.py // 统一导出
|
||
│ ├── auth.py // 登录校验 + 白名单
|
||
│ ├── demo.py // 演示模式(@check_demo)
|
||
│ ├── transaction.py // AOP 事务拦截器
|
||
│ ├── operation_log.py // 操作日志自动记录
|
||
│ └── errors.py // 异常处理器
|
||
├── routes/ // 路由注册
|
||
│ └── v1.py // API v1 路由注册中心(BLUEPRINTS 列表)
|
||
└── modules/ // 业务模块(可插拔)
|
||
├── auth/ // 认证模块(登录/登出/验证码/刷新Token)
|
||
├── system/ // 系统管理
|
||
│ ├── user/ // 用户(models / schema / repository / service / router)
|
||
│ ├── role/ // 角色
|
||
│ ├── menu/ // 菜单
|
||
│ ├── dept/ // 部门
|
||
│ ├── position/ // 岗位
|
||
│ └── level/ // 职级
|
||
├── association/ // 关联表模块
|
||
│ ├── user_role/ // 用户-角色关联
|
||
│ └── role_menu/ // 角色-菜单关联
|
||
├── dictionary/ // 数据字典(dict / dict_item / dict_utils)
|
||
├── configuration/ // 系统配置(config / config_item)
|
||
├── cms/ // 内容管理
|
||
│ ├── article/ // 文章管理
|
||
│ ├── category/ // 分类管理
|
||
│ └── link/ // 友情链接
|
||
├── city/ // 行政区划
|
||
├── job/ // 定时任务(含 scheduler_service / executor)
|
||
├── job_log/ // 任务执行日志
|
||
├── notice/ // 通知公告
|
||
├── param/ // 参数管理
|
||
├── file_template/ // 文件模板
|
||
├── upload/ // 文件上传
|
||
├── login_log/ // 登录日志
|
||
├── operation_log/ // 操作日志
|
||
├── example/ // 示例模块
|
||
└── generator/ // 代码生成器
|
||
```
|
||
|
||
## 前端目录 (ui/src/)
|
||
|
||
```
|
||
ui/src/
|
||
├── main.ts // 入口文件(注册插件、挂载应用)
|
||
├── App.vue // 根组件
|
||
├── api/ // API 接口定义(按业务分组)
|
||
│ ├── system/ // 系统管理接口(user.ts / role.ts / menu.ts 等)
|
||
│ ├── content/ // 内容管理接口
|
||
│ ├── data/ // 数据管理接口
|
||
│ ├── monitor/ // 监控管理接口
|
||
│ ├── tool/ // 工具接口
|
||
│ ├── file/ // 文件接口
|
||
│ ├── region/ // 地区接口
|
||
│ ├── setting/ // 设置接口
|
||
│ ├── dashboard/ // 仪表盘接口
|
||
│ └── common/ // 公共接口
|
||
├── views/ // 页面视图(按业务分组)
|
||
│ ├── login/ // 登录页
|
||
│ ├── dashboard/ // 控制台
|
||
│ ├── system/ // 系统管理页面(user / role / menu / dept / position / level)
|
||
│ ├── content/ // 内容管理页面(article / category / link)
|
||
│ ├── data/ // 数据管理页面(dict / config / notice / param / city)
|
||
│ ├── monitor/ // 监控管理页面(job / job/log)
|
||
│ ├── file/ // 文件管理页面(fileTemplate)
|
||
│ ├── tool/ // 工具页面(generator / example)
|
||
│ ├── setting/ // 设置页面(profile / configWeb)
|
||
│ ├── exception/ // 异常页面(404 / 500)
|
||
│ ├── about/ // 关于页面
|
||
│ ├── iframe/ // 内嵌页面
|
||
│ └── redirect/ // 重定向页面
|
||
├── components/ // 公共组件
|
||
│ ├── Table/ // BasicTable 表格组件
|
||
│ ├── Form/ // BasicForm 表单组件
|
||
│ ├── Modal/ // Modal 弹窗组件
|
||
│ ├── Page/ // PageWrapper 页面容器
|
||
│ ├── Upload/ // 文件上传组件
|
||
│ ├── Editor/ // 富文本编辑器
|
||
│ ├── Cropper/ // 图片裁剪组件
|
||
│ ├── Qrcode/ // 二维码组件
|
||
│ ├── Excel/ // Excel 导入导出组件
|
||
│ ├── ChinaArea/ // 省市区联动组件
|
||
│ ├── TableSelect/ // 表格选择器组件
|
||
│ ├── Select/ // 下拉选择组件
|
||
│ ├── CountTo/ // 数字动画组件
|
||
│ ├── Authority/ // 权限组件
|
||
│ ├── CheckToken/ // Token 检查组件
|
||
│ ├── Application/ // 应用组件
|
||
│ ├── Websocket/ // WebSocket 组件
|
||
│ ├── Lockscreen/ // 锁屏组件
|
||
│ ├── Password/ // 密码强度组件
|
||
│ ├── Region/ // 区域选择组件
|
||
│ ├── numberInput/ // 数字输入组件
|
||
│ ├── priceInput/ // 价格输入组件
|
||
│ ├── pagination/ // 分页组件
|
||
│ ├── Render/ // 渲染组件
|
||
│ ├── icon/ // 图标组件
|
||
│ └── importFile/ // 文件导入组件
|
||
├── hooks/ // 组合式函数
|
||
│ ├── core/ // 核心 hooks
|
||
│ ├── event/ // 事件 hooks
|
||
│ ├── setting/ // 配置 hooks
|
||
│ ├── web/ // Web hooks
|
||
│ ├── use-async.ts // 异步请求状态管理
|
||
│ ├── useBattery.ts // 电量监听
|
||
│ ├── useDomWidth.ts // DOM 宽度监听
|
||
│ ├── useOnline.ts // 网络状态监听
|
||
│ └── useTime.ts // 时间工具
|
||
├── store/ // Pinia 状态管理
|
||
│ ├── index.ts // Store 入口
|
||
│ ├── modules/ // Store 模块(user / perm / dict / tabs / app)
|
||
│ ├── plugins/ // Store 插件
|
||
│ └── types.ts // 类型定义
|
||
├── router/ // 路由配置
|
||
│ ├── index.ts // 路由实例
|
||
│ ├── base.ts // 静态路由(登录 / 404)
|
||
│ ├── constant.ts // 常量路由
|
||
│ ├── generator-routers.ts // 动态路由生成(后端菜单 → Vue Router)
|
||
│ ├── router-guards.ts // 路由守卫(登录校验 / 菜单加载)
|
||
│ ├── router-icons.ts // 路由图标映射
|
||
│ ├── menus/ // 菜单配置
|
||
│ └── types.ts // 类型定义
|
||
├── utils/ // 工具函数
|
||
│ ├── http/ // HTTP 请求封装(Axios 拦截器)
|
||
│ ├── auth.ts // Token 管理 / 消息提示 / 确认对话框
|
||
│ ├── dateUtil.ts // 日期格式化
|
||
│ ├── downloadFile.ts // 文件下载
|
||
│ ├── validate.ts // 表单校验
|
||
│ ├── env.ts // 环境变量
|
||
│ ├── color.ts // 颜色工具
|
||
│ ├── wartermark.ts // 水印
|
||
│ ├── useLockFn.ts // 防重复提交
|
||
│ └── Storage.ts // 本地存储
|
||
├── directives/ // 自定义指令(v-perm 权限指令)
|
||
├── plugins/ // 插件注册(ElementPlus / 自定义组件 / 指令)
|
||
├── styles/ // 全局样式(Tailwind CSS / ElementPlus 主题覆盖)
|
||
├── enums/ // 枚举定义
|
||
└── assets/ // 静态资源
|
||
├── icons/ // 图标
|
||
└── images/ // 图片
|
||
```
|
||
|
||
:::tip 注意事项
|
||
+ 保持一致性:目录结构一旦确定,应保持一致性,避免随意更改。
|
||
+ 合理划分模块:根据项目的实际需求,合理划分功能模块,避免过度模块化。
|
||
+ 文档记录:在项目文档中详细说明目录结构和各模块的功能,便于新成员快速上手。
|
||
+ 版本控制:使用 `Git` 等版本控制工具,并在 `.gitignore` 文件中配置不需要跟踪的目录和文件。
|
||
:::
|
||
|
||
## 总结
|
||
|
||
软件架构的目录结构是项目开发和维护的基础,直接影响到项目的可维护性、可扩展性和开发效率。采用分层的目录结构(后端 router → service → repository,前端 api → views → components),结合模块化管理,是一个有效的解决方案。每个业务模块包含 models.py(模型)、schema.py(表单校验)、repository.py(数据访问)、service.py(业务逻辑)、router.py(路由控制)五个文件,职责清晰,便于维护。
|