:::tip 本章概要 代码生成器的整体架构、核心模块和生成流程概述。 ::: # 概述与架构 代码生成器是项目的核心效率工具,能够根据数据库表结构自动生成完整的后端 Django 模块代码和前端 Vue 页面代码,并自动注册路由和菜单权限节点。 ## 生成能力总览 | 维度 | 生成内容 | |:----|:----| | 后端模块 | `__init__.py` / `models.py` / `forms.py` / `services.py` / `views.py` / `urls.py` / `apps.py` / `admin.py` | | 后端路由 | 自动追加到 `application/urls.py` + 注册到 `INSTALLED_APPS` | | 前端页面 | `index.vue` / `edit.vue` / `detail.vue` / `columns.ts` / `querySchemas.ts` / `api.ts` | | 菜单权限 | 自动创建菜单节点 + 8 个权限节点 | ## 两种使用方式 | 方式 | 入口 | 适用场景 | |:----|:----|:----| | CLI 命令行 | `python generator.py <表名>` | 开发阶段,快速生成单个模块 | | Web 管理界面 | 开发工具 -> 代码生成 | 运维阶段,可视化操作,支持批量生成 | 两种方式共享同一套引擎代码,生成结果完全一致。 ## 文件结构 ``` 项目根目录 ├── generator.py # CLI 命令行入口(含 TableSchemaParser) ├── generator_config.py # 代码生成引擎(CodeGenerator) ├── config.json # 示例配置文件 └── public/templates/ # Jinja2 模板目录 ├── models.py.tpl # ORM 模型 ├── forms.py.tpl # Django 表单验证 ├── services.py.tpl # 业务逻辑层 ├── views.py.tpl # 视图层 ├── urls.py.tpl # 路由配置 ├── apps.py.tpl # 应用配置 ├── admin.py.tpl # 后台管理 ├── ui/ # 普通分页列表模板 │ ├── index.vue.tpl │ ├── edit.vue.tpl │ ├── detail.vue.tpl │ ├── columns.ts.tpl │ ├── querySchemas.ts.tpl │ └── api.ts.tpl └── ui2/ # 树状列表模板 ├── index.vue.tpl ├── edit.vue.tpl ├── detail.vue.tpl └── columns.ts.tpl ``` ## 核心组件 ### generator.py -- 表结构解析器 包含 `TableSchemaParser` 类,从 `information_schema` 读取表元数据,输出标准化配置字典。智能识别图片字段、富文本字段、状态字段、排序字段、枚举字段、查询条件等。同时作为 CLI 入口,提供命令行参数解析。 ### generator_config.py -- 代码生成引擎 包含 `CodeGenerator` 类,接收配置字典,通过 Jinja2 渲染模板,写入文件,并自动追加路由到 `application/urls.py`、注册应用到 `settings.py` 的 `INSTALLED_APPS`、创建菜单权限节点。 ### application/generator/ -- Web API 业务逻辑 提供表分页查询、表详情、字段查询、单表/批量生成等服务方法,供 HTTP 端点调用。底层调用 `generator.py` 和 `generator_config.py` 的功能。 ### public/templates/ -- 模板目录 Jinja2 模板文件,分为后端模板(7 个)和前端模板(ui/ 6 个 + ui2/ 4 个)。含 `parent_id` / `pid` 字段的表自动切换为树形模板(ui2/)。 ## 生成流程 ``` ┌─────────────────────────────────────┐ │ 数据库 information_schema │ └──────────────────┬──────────────────┘ │ ▼ ┌─────────────────────────────────────┐ │ generator.py(TableSchemaParser) │ │ - 智能识别字段类型/图片/富文本/状态 │ │ - 生成标准化配置字典 │ └──────────────────┬──────────────────┘ │ 配置字典 ▼ ┌─────────────────────────────────────┐ │ generator_config.py(CodeGenerator) │ │ - Jinja2 模板渲染 │ │ - 写入文件 │ └───┬──────────┬──────────┬──────────┘ │ │ │ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ 后端模块 │ │ 前端页面 │ │ 自动注册 │ │ models │ │ index.vue│ │ urls.py │ │ forms │ │ edit.vue │ │ settings.py │ │ services │ │ columns │ │ 菜单权限节点 │ │ views │ │ api.ts │ │ │ │ urls │ │ ... │ │ │ └──────────┘ └──────────┘ └──────────────┘ ``` ## 使用限制 :::warning 使用前提 1. **数据库要求**:代码生成器基于 MySQL 的 `information_schema` 查询表结构,仅支持 MySQL 数据库。 2. **表结构要求**:不支持复合主键、外键关联等复杂表结构,建议使用单主键(自增 id)的标准业务表。 3. **环境要求**:需确保 Django 环境已初始化、MySQL 和 Redis 服务正常运行。 ::: ## 演示表 本章以 `django_example` 表为贯穿案例,对应 `application/example/` 模块: ```sql CREATE TABLE `django_example` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL COMMENT '案例名称', `avatar` varchar(255) DEFAULT NULL COMMENT '案例图片', `type` int DEFAULT 1 COMMENT '案例类型:1-类型1 2-类型2 3-类型3 4-类型4', `status` int DEFAULT 1 COMMENT '案例状态:1-正常 2-禁用', `sort` int DEFAULT 0 COMMENT '排序', `create_user` varchar(50) DEFAULT NULL, `create_time` datetime DEFAULT NULL, `update_user` varchar(50) DEFAULT NULL, `update_time` datetime DEFAULT NULL, `is_delete` int DEFAULT 0, PRIMARY KEY (`id`) ) COMMENT='案例表'; ``` ## 总结 代码生成器通过解析数据库表结构,自动生成符合项目规范的完整模块代码。CLI 适合开发阶段快速生成,Web 界面适合运维阶段批量管理。模板使用 Jinja2 语法,可自由定制生成结果。