模板约定
脚手架的核心是 templates/ 目录:其中的文件就是用户最终拿到的文件。修改模板等同于修改生成出来的项目。
各栈保持自身惯例
Section titled “各栈保持自身惯例”不同技术栈的目录组织刻意不做统一,而是各自遵循该语言的社区惯例:
| 模板 | 组织方式 |
|---|---|
backend-python/ |
领域模块化:app/core/(基础设施)+ 每个业务域一个包(auth/、user/、role/、permission/、menu/ …),包内含 models.py / schemas.py / crud.py / router.py |
backend-java/ |
按层:controller/、service/、repository/、entity/、dto/,另有 common/、config/、security/ |
frontend-react/ 与 frontend-vue/ |
按功能:页面在 pages/settings/<Domain>/,接口按域拆分在 api/,类型按域拆分在 types/ |
- 前端与后端 UI 文案统一使用中文。
- 接口响应固定为
{ code: 0, message: "success", data },错误使用code: -1。 - TS/JS 变量用
camelCase,组件用PascalCase。 - Python 的 Pydantic schema 字段用
camelCase(如roleId),ORM 字段用snake_case(如role_id)。
共享基础设施
Section titled “共享基础设施”- Python 的
ApiResponse/PaginatedData位于app/core/schemas.py。 - 权限码目录是唯一来源:Python
app/core/permissions_catalog.py,Javaconfig/PermissionCatalog.java。 - 菜单展示与鉴权分离:
permissions只负责授权,menu_groups/menu_items负责分组、路由、图标与顺序。 - 菜单权限必须通过菜单管理创建;内置菜单不可删除,自定义菜单删除时要同步清理角色授权。
- 数据导出包使用
manifest.json + schema.sql + checksums.sha256 + data/*.jsonl,只支持同后端、同版本恢复;app_state不入包。 - 前端 HTTP 层是轻量的 fetch 封装(
api/client.ts),不要引入 axios。 - fetch 封装需要显式支持二进制下载、
FormData上传和自定义状态头,不能把所有响应都按 JSON 固定解析。