Become a sponsor

本章概要
代码生成器的整体架构、核心模块和生成流程概述。
代码生成器是项目的核心效率工具,能够根据数据库表结构自动生成完整的后端 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包含 TableSchemaParser 类,从 information_schema 读取表元数据,输出标准化配置字典。智能识别图片字段、富文本字段、状态字段、排序字段、枚举字段、查询条件等。同时作为 CLI 入口,提供命令行参数解析。
包含 CodeGenerator 类,接收配置字典,通过 Jinja2 渲染模板,写入文件,并自动追加路由到 application/urls.py、注册应用到 settings.py 的 INSTALLED_APPS、创建菜单权限节点。
提供表分页查询、表详情、字段查询、单表/批量生成等服务方法,供 HTTP 端点调用。底层调用 generator.py 和 generator_config.py 的功能。
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 │ │ ... │ │ │
└──────────┘ └──────────┘ └──────────────┘使用前提
information_schema 查询表结构,仅支持 MySQL 数据库。其他数据库(PostgreSQL、Oracle、SQL Server 等)需手动创建模块。本章以 django_example 表为贯穿案例,对应 application/example/ 模块:
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 语法,可自由定制生成结果。