Files
djangoadmin-wiki/DjangoAdmin_Flask_AntdVue/zh/volume5/faq.md
T
2026-09-12 23:12:15 +08:00

155 lines
4.8 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 本章概要
代码生成器使用过程中常见问题的原因分析和解决方案。
:::
# 常见问题
## 生成报错 "模块 xxx 已存在"
**原因**:生成器会校验目标目录不存在,避免覆盖已有模块。
**解决方式**:
```bash
# 1. 删除已有模块目录
rm -rf src/modules/example
# 2. 从 v1.py 中移除对应的导入和注册语句
# 删除这两行:
# from src.modules.example.router import example_blue
# BLUEPRINTS 中的 example_blue
# 3. 删除数据库中对应的菜单记录
# DELETE FROM flask_menu WHERE path = '/tool/example';
# 4. 重新生成
python generator.py flask_example
```
## 生成后前端页面不显示
**排查步骤**:
1. **确认菜单已创建**:检查数据库 `flask_menu` 表中是否有 `path = '/tool/example'` 的记录
2. **确认路由组件路径**:菜单的 `component` 字段应为 `tool/example/index`
3. **确认权限已分配**:当前用户需要有对应菜单的访问权限
4. **清除缓存**:退出重新登录,或清除浏览器缓存
5. **确认后端已重启**:新路由需要重启后端服务才能生效
## 如何重新生成?
完整清理流程:
```bash
# 1. 删除后端模块
rm -rf src/modules/example
# 2. 清理 v1.py 中的导入和注册
# 3. 删除前端文件
rm -rf ui/src/views/tool/example
rm ui/src/api/tool/example.ts
# 4. 删除数据库菜单
# DELETE FROM flask_menu WHERE path = '/tool/example';
# 5. 重新生成
python generator.py flask_example
```
## 批量生成有数量限制吗?
Web API 批量生成最多支持 50 个表(`MAX_BATCH_SIZE = 50`)。CLI 无限制,但建议逐表生成,便于排查问题。
## 树状列表是如何判断的?
当表中存在 `parent_id` 或 `pid` 字段时,自动切换为树状模板(`ui2/`),生成树形结构的增删改查页面。
树状列表与普通分页列表的区别:
| 维度 | 普通列表(ui/) | 树状列表(ui2/) |
|:----|:----|:----|
| 触发条件 | 无 parent_id/pid | 有 parent_id/pid |
| 模板数量 | 5 个组件 + 1 个 API | 3 个组件 + 1 个 API |
| 数据加载 | 分页请求 | 全量加载 + 前端 buildTree |
| 展开/折叠 | 无 | 支持 |
| 父子关系 | 无 | 自动识别 |
## CLI 报错 "No module named 'src'"
**原因**:未在项目根目录执行命令。
**解决**:确保在项目根目录(包含 `src/` 和 `generator.py` 的目录)执行:
```bash
cd /data/apps/djangoadmin
python generator.py flask_example
```
## 生成的代码有语法错误
**可能原因**:
- 表名或字段名包含特殊字符
- 字段注释包含未转义的引号
- 数据库连接异常导致解析不完整
**解决**:
1. 使用 `--dry-run` 检查解析结果
2. 导出配置文件检查字段内容:`python generator.py flask_example --dry-run --output config.json`
3. 手动修正配置文件后用 `--config` 重新生成
## 如何自定义生成的代码风格?
修改 `src/modules/generator/templates/` 下的模板文件。模板使用 Jinja2 语法,详见 [6.6 自定义模板](/zh/volume5/templates)。
修改模板后重新生成即可生效,不影响已有模块。
## 生成速度慢
**可能原因**:
- 数据库连接延迟高
- 表字段数量非常多(50+ 字段)
- 同时生成大量表(批量生成)
**解决**:
- 检查数据库网络连接
- 减少单次批量生成的表数量
- 使用 CLI 单表生成替代批量生成
## 生成器支持哪些数据库?
:::warning 数据库限制
代码生成器通过查询 MySQL 的 `information_schema` 获取表结构信息,**仅支持 MySQL 数据库**。`service.py` 中的 `_query_tables`、`_query_table_detail`、`_query_table_columns` 等函数使用了 MySQL 特有的 SQL 语法(如 `TABLE_SCHEMA = (SELECT DATABASE())`),在其他数据库中可能无法正常执行。
:::
代码生成器通过 `information_schema` 查询表元数据,支持以下数据库:
| 数据库 | 支持程度 |
|:----|:----|
| MySQL | 完全支持(主要开发和测试环境) |
| PostgreSQL | 支持(information_schema 兼容) |
| SQL Server | 支持(information_schema 兼容) |
| SQLite | 部分支持(information_schema 有限) |
| Oracle | 部分支持(需适配) |
## 模板语法错误如何排查?
**症状**:生成时报错 `jinja2.exceptions.TemplateSyntaxError`。
**排查步骤**:
1. 查看错误信息中的模板文件名和行号
2. 打开对应的 `.tpl` 文件检查语法
3. 常见错误:
- `{% if %}` 缺少 `{% endif %}`
- 变量名拼写错误(如 `f.nmae` 应为 `f.name`)
- 使用了未定义的变量(如字段对象中不存在的属性)
4. 修改模板后重新生成
## 总结
大部分问题可通过以下流程解决:
1. 使用 `--dry-run` 预览配置
2. 清理旧文件后重新生成
3. 确认数据库菜单和权限配置正确
4. 重启后端服务