Files
djangoadmin-wiki/DjangoAdmin_Django_NaiveVue/zh/volume5/overview.md
T
2026-09-13 18:12:07 +08:00

138 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
:::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 数据库。其他数据库(PostgreSQL、Oracle、SQL Server 等)需手动创建模块。
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 语法,可自由定制生成结果。