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

318 lines
8.7 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 本章概要
代码生成器 JSON 配置文件的格式说明,包括模块名称、字段属性、字典编码等配置项的详细解释。
:::
# 配置文件详解
代码生成器支持通过 JSON 配置文件驱动生成。配置文件可通过 CLI `--output` 导出,也可手动编写,然后用 `--config` 加载生成。
## 导出配置
```bash
# 从数据库表解析并导出
python generator.py flask_example --dry-run --output config.json
# 生成代码的同时保存配置
python generator.py flask_example --output config.json
```
## 使用配置生成
```bash
python generator.py --config config.json
```
跳过表解析,直接从配置文件读取生成参数。适用于:
- 微调字段配置后重新生成
- 表结构已不存在但配置保留
- 跨项目复用配置
## 配置文件结构
```json
{
"app_name": "example",
"module_comment": "案例",
"model_class_name": "Example",
"permission_prefix": "sys:example",
"display_field": "name",
"primary_key": "id",
"has_sort": true,
"has_status": true,
"has_unique_code": true,
"has_export": false,
"has_image_field": false,
"has_rich_text_field": true,
"fields": [...]
}
```
## 顶层配置项
| 字段 | 类型 | 必填 | 说明 |
|:----|:----|:----|:----|
| `app_name` | str | 是 | 模块名(小写下划线),用于目录名和文件名 |
| `module_comment` | str | 是 | 模块中文名,用于注释和菜单名 |
| `model_class_name` | str | 是 | 模型类名(帕斯卡命名) |
| `permission_prefix` | str | 否 | 权限前缀,默认 `sys:{app_name}` |
| `display_field` | str | 否 | 显示字段,默认 `name` |
| `primary_key` | str | 否 | 主键字段,默认 `id` |
| `has_sort` | bool | 否 | 有排序字段,默认 `false` |
| `has_status` | bool | 否 | 有状态字段,默认 `false` |
| `has_unique_code` | bool | 否 | 有唯一编码字段,默认 `false` |
| `has_export` | bool | 否 | 有导出功能,默认 `false` |
| `has_image_field` | bool | 否 | 有图片字段,默认 `false` |
| `has_rich_text_field` | bool | 否 | 有富文本字段,默认 `false` |
| `fields` | list | 是 | 字段配置列表 |
## 字段配置项
每个字段对象包含:
### 基础属性
| 字段 | 类型 | 必填 | 说明 |
|:----|:----|:----|:----|
| `name` | str | 是 | 字段名(snake_case) |
| `comment` | str | 否 | 字段注释 |
| `db_type` | str | 是 | SQLAlchemy 类型 |
| `db_args` | str | 否 | 类型参数(如 `"100"`) |
| `form_type` | str | 否 | WTForms 类型(str/int/float/bool) |
| `max_length` | int | 否 | 最大长度 |
### 约束属性
| 字段 | 类型 | 默认值 | 说明 |
|:----|:----|:----|:----|
| `nullable` | bool | `false` | 是否可空 |
| `required` | bool | `true` | 是否必填(与 nullable 相反) |
| `default` | any | `null` | 默认值 |
### 展示控制
| 字段 | 类型 | 默认值 | 说明 |
|:----|:----|:----|:----|
| `in_form` | bool | `true` | 出现在表单中 |
| `in_list` | bool | `true` | 出现在列表中 |
| `editable` | bool | `true` | 可编辑 |
| `filterable` | bool | `false` | 作为查询条件 |
| `filter_type` | str | `模糊查询` | 筛选类型(`精确匹配`/`模糊查询`) |
| `searchable` | bool | `false` | 可搜索 |
### 功能标识
| 字段 | 类型 | 默认值 | 说明 |
|:----|:----|:----|:----|
| `is_image` | bool | `false` | 图片字段 |
| `is_rich_text` | bool | `false` | 富文本字段 |
| `is_status` | bool | `false` | 状态字段 |
| `is_sort` | bool | `false` | 排序字段 |
### 选项属性
| 字段 | 类型 | 说明 |
|:----|:----|:----|
| `choices` | list | `[[value, label], ...]` 元组列表 |
| `dict_code` | str | 数据字典编码 |
| `min_value` | int | 最小值 |
| `max_value` | int | 最大值 |
## 完整示例
```json
{
"app_name": "example",
"module_comment": "案例",
"model_class_name": "Example",
"permission_prefix": "sys:example",
"display_field": "name",
"has_sort": true,
"has_status": true,
"has_unique_code": true,
"has_image_field": true,
"has_rich_text_field": true,
"fields": [
{
"name": "name",
"comment": "案例名称",
"db_type": "String",
"db_args": "100",
"form_type": "str",
"max_length": 100,
"nullable": false,
"required": true,
"in_form": true,
"in_list": true,
"filterable": true,
"filter_type": "模糊查询",
"searchable": true
},
{
"name": "code",
"comment": "案例编码",
"db_type": "String",
"db_args": "50",
"form_type": "str",
"max_length": 50,
"nullable": false,
"required": true,
"in_form": true,
"in_list": true,
"filterable": true,
"filter_type": "精确匹配",
"searchable": true
},
{
"name": "type",
"comment": "案例类型:1-类型1 2-类型2 3-类型3",
"db_type": "Integer",
"form_type": "int",
"nullable": false,
"required": true,
"in_form": true,
"in_list": true,
"filterable": true,
"filter_type": "精确匹配",
"choices": [[1, "类型1"], [2, "类型2"], [3, "类型3"]],
"dict_code": "example_type"
},
{
"name": "status",
"comment": "案例状态:1-正常 2-停用",
"db_type": "Integer",
"form_type": "int",
"default": 1,
"nullable": false,
"required": true,
"in_form": true,
"in_list": true,
"filterable": true,
"filter_type": "精确匹配",
"is_status": true,
"choices": [[1, "正常"], [2, "停用"]],
"dict_code": "example_status"
},
{
"name": "sort",
"comment": "排序",
"db_type": "Integer",
"form_type": "int",
"default": 0,
"nullable": false,
"required": true,
"in_form": true,
"in_list": true,
"is_sort": true
},
{
"name": "cover",
"comment": "封面图",
"db_type": "String",
"db_args": "255",
"form_type": "str",
"max_length": 255,
"nullable": true,
"required": false,
"in_form": true,
"in_list": true,
"is_image": true
},
{
"name": "content",
"comment": "案例内容",
"db_type": "Text",
"form_type": "str",
"nullable": true,
"required": false,
"in_form": true,
"in_list": false,
"is_rich_text": true
},
{
"name": "remark",
"comment": "备注",
"db_type": "String",
"db_args": "500",
"form_type": "str",
"max_length": 500,
"nullable": true,
"required": false,
"in_form": true,
"in_list": true,
"filterable": true,
"filter_type": "模糊查询"
}
]
}
```
## 字段配置校验规则
`db_type` 必须是以下值之一:
| 合法值 | 对应 SQLAlchemy 类型 |
|:----|:----|
| `String` | String(需配合 `db_args` 指定长度) |
| `Text` | Text |
| `Integer` | Integer |
| `BigInteger` | BigInteger |
| `DateTime` | DateTime |
| `Date` | Date |
| `Time` | Time |
| `Float` | Float |
| `Numeric` | Numeric |
| `Boolean` | Boolean |
| `JSON` | JSON |
`form_type` 必须是以下值之一:`str` / `int` / `float` / `bool`
`filter_type` 必须是以下值之一:`精确匹配` / `模糊查询`
## 常用微调场景
### 修改模块中文名
```json
{
"module_comment": "培训记录"
}
```
### 隐藏字段(不出现在列表/表单)
```json
{
"name": "internal_code",
"in_form": false,
"in_list": false
}
```
### 添加自定义字段
在 `fields` 数组中追加新的字段配置。
### 修改筛选类型
```json
{
"name": "name",
"filterable": true,
"filter_type": "精确匹配"
}
```
### 添加选项
```json
{
"name": "level",
"choices": [[1, "初级"], [2, "中级"], [3, "高级"]],
"dict_code": "example_level"
}
```
## 总结
配置文件为 JSON 格式,包含模块名称、表名、字段属性、字典编码等信息。支持字段级别的精细配置(是否可搜索、是否在列表显示、字典编码映射等),可通过 Web UI 可视化编辑或手动修改 JSON 文件。