Become a sponsor

项目遵循开闭原则(OCP):对扩展开放,对修改关闭。新功能通过添加新模块实现,而非修改现有代码。系统通过 Django App 机制、代码生成器、模板定制等方式提供扩展能力。
每个业务模块独立为一个 Django App,可独立开发、测试和部署:
application/
+-- example/ # 案例模块
| +-- __init__.py
| +-- apps.py # 应用配置
| +-- models.py # 数据模型
| +-- forms.py # 表单验证
| +-- services.py # 业务逻辑
| +-- views.py # 视图处理
| +-- urls.py # 路由配置
|
+-- user/ # 用户模块
+-- role/ # 角色模块
+-- ... # 其他模块新模块需要在 application/settings.py 中注册:
INSTALLED_APPS = [
# ... 其他应用
'application.example', # 注册案例模块
]新模块需要在 application/urls.py 中注册路由:
urlpatterns = [
# ... 其他路由
path('example/', include('application.example.urls')),
]代码生成器是 核心功能,通过数据库表定义自动生成完整的 CRUD 模块,包括:
# 从数据库表生成配置
python generator.py django_<table>
# 从配置文件生成代码
python generator.py --config config.json
# 仅预览配置,不生成代码
python generator.py django_<table> --dry-run1. 解析数据库表结构
+-- 获取字段名、类型、注释、长度、索引
+-- 启发式分类字段(图片、富文本、状态、排序等)
|
v
2. 生成配置文件 (config.json)
+-- 模块名称、表名、字段定义
+-- 前端组件类型、验证规则
|
v
3. 渲染 Jinja2 模板
+-- 后端模板:models.py.tpl, forms.py.tpl, services.py.tpl 等
+-- 前端模板:index.vue.tpl, edit.vue.tpl, api.ts.tpl 等
|
v
4. 写入文件
+-- application/<module>/ # 后端模块
+-- ui/src/views/... # 前端页面
+-- ui/src/api/... # API模块
|
v
5. 自动注册
+-- 执行 makemigrations/migrate
+-- 插入菜单和权限节点
+-- 追加路由到 application/urls.py
+-- 追加应用到 INSTALLED_APPS{
"appName": "example",
"tableName": "django_example",
"tableComment": "案例表",
"className": "Example",
" moduleName": "案例",
"fields": [
{
"fieldName": "name",
"fieldType": "CharField",
"fieldComment": "案例名称",
"maxLength": 100,
"isRequired": true,
"isSearch": true,
"componentType": "input"
},
{
"fieldName": "status",
"fieldType": "IntegerField",
"fieldComment": "案例状态",
"choices": [
{"value": 1, "label": "正常"},
{"value": 2, "label": "禁用"}
],
"componentType": "select"
}
]
}代码生成器使用 Jinja2 模板,模板文件位于 public/templates/ 目录:
public/templates/
+-- models.py.tpl # 模型模板
+-- forms.py.tpl # 表单模板
+-- services.py.tpl # 服务模板
+-- views.py.tpl # 视图模板
+-- urls.py.tpl # 路由模板
+-- apps.py.tpl # 应用配置模板
+-- admin.py.tpl # Admin注册模板
+-- migration.py.tpl # 迁移文件模板
+-- ui/
+-- index.vue.tpl # 列表页模板
+-- edit.vue.tpl # 编辑页模板
+-- detail.vue.tpl # 详情页模板
+-- api.ts.tpl # API模块模板
+-- columns.ts.tpl # 表格列配置模板
+-- querySchemas.ts.tpl # 查询表单配置模板{# models.py.tpl #}
from django.db import models
from application.models import BaseModel
from utils.common import get_table_name
class {{ className }}(BaseModel):
"""{{ tableComment }}"""
{% for field in fields %}
{{ field.fieldName }} = models.{{ field.fieldType }}(
{% if field.maxLength %} max_length={{ field.maxLength }},{% endif %}
{% if not field.isRequired %} null=True, blank=True,{% endif %}
verbose_name="{{ field.fieldComment }}",
db_comment='{{ field.fieldComment }}'
)
{% endfor %}
class Meta:
db_table = get_table_name('{{ appName }}')
db_table_comment = "{{ tableComment }}"开发者可以根据项目需求定制模板:
public/templates/ 目录下的模板文件通过 Django 中间件机制可灵活添加请求/响应处理逻辑:
# middleware/custom_middleware.py
class CustomMiddleware:
"""自定义中间件"""
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
# 请求处理前的逻辑
# ...
response = self.get_response(request)
# 响应处理后的逻辑
# ...
return response在 application/settings.py 中注册自定义中间件:
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'middleware.custom_middleware.CustomMiddleware', # 注册自定义中间件
# ... 其他中间件
]Django 提供信号机制,可以在特定事件发生时执行自定义逻辑:
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=Example)
def example_post_save(sender, instance, created, **kwargs):
"""案例保存后的处理"""
if created:
# 新增记录后的逻辑
pass
else:
# 更新记录后的逻辑
pass| 信号 | 触发时机 | 说明 |
|---|---|---|
pre_save | 保存前 | 数据验证前 |
post_save | 保存后 | 数据保存后 |
pre_delete | 删除前 | 删除前检查 |
post_delete | 删除后 | 清理关联数据 |
class_prepared | 模型类准备就绪 | 字段顺序重排 |
# application/management/commands/my_command.py
from django.core.management.base import BaseCommand
class Command(BaseCommand):
help = '自定义管理命令说明'
def add_arguments(self, parser):
parser.add_argument('arg1', type=str, help='参数说明')
def handle(self, *args, **options):
arg1 = options['arg1']
# 命令逻辑
self.stdout.write(self.style.SUCCESS(f'执行成功: {arg1}'))python manage.py my_command value1python manage.py runserver # 启动开发服务器
python manage.py makemigrations <app> # 生成迁移文件
python manage.py migrate # 执行迁移
python manage.py createsuperuser # 创建超级用户前端路由由后端菜单数据动态生成,新页面通过插入菜单记录自动注册:
INSERT INTO django_menu (name, path, component, permission, type, status)
VALUES ('案例管理', '/example', 'tool/example/index', 'sys:example:page', 0, 0);前端使用 Vue3 + ElementPlus,可通过以下方式扩展:
ui/src/components/ 目录下创建新组件ui/src/hooks/ 目录下创建自定义 hooksui/src/directives/ 目录下创建自定义指令新增 API 接口需要在 ui/src/api/ 目录下创建对应的 TypeScript 模块:
// ui/src/api/tool/example.ts
import { http } from '@/utils/http/axios'
export function getExamplePage(params) {
return http.get('/example/page', params)
}
export function addExample(data) {
return http.post('/example/add', data)
}python generator.py django_<table>is_delete=Falsesys:<module>:<action> 权限R.ok() 和 R.failed() 返回响应@operation_log 装饰器记录操作日志