Skip to content

本章概要

代码生成器的整体架构、核心模块和生成流程概述。

概述与架构

代码生成器是项目的核心效率工具,能够根据数据库表结构自动生成完整的后端 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.pyINSTALLED_APPS、创建菜单权限节点。

application/generator/ -- Web API 业务逻辑

提供表分页查询、表详情、字段查询、单表/批量生成等服务方法,供 HTTP 端点调用。底层调用 generator.pygenerator_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     │ │ ...      │ │              │
              └──────────┘ └──────────┘ └──────────────┘

使用限制

使用前提

  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 语法,可自由定制生成结果。

小蚂蚁云团队 · 提供技术支持