Skip to content

公告/链接

公告和链接是两个简单 CRUD 内容模块,提供标准的增删改查接口。适用于系统公告、友情链接等场景。

公告管理

公告模型

python
# application/notice/models.py
from application.models import BaseModel

class Notice(BaseModel):
    """通知公告模型类"""
    class Meta:
        db_table = 'django_notice'

    title = models.CharField(max_length=255, verbose_name='通知标题')
    cover = models.CharField(max_length=255, null=True, blank=True, verbose_name='通知封面')
    type = models.IntegerField(default=1, verbose_name='通知类型:1-通知 2-公告')
    click_num = models.IntegerField(default=0, verbose_name='点击率')
    status = models.IntegerField(default=1, verbose_name='通知状态:1-正常 2-停用')
    content = models.TextField(null=True, blank=True, verbose_name='通知公告内容')

字段说明

字段类型说明
titlestr通知标题
coverstr封面图片路径
typeint类型:1-通知 2-公告
click_numint点击次数(自动统计)
statusint状态:1-正常 2-停用
contentstr富文本内容(HTML)

API 接口

接口方法权限节点说明
/notice/pageGETsys:notice:page公告分页列表
/notice/detail/<int:id>GETsys:notice:detail公告详情
/notice/addPOSTsys:notice:add新增公告
/notice/updatePUTsys:notice:update编辑公告
/notice/delete/<int:id>DELETEsys:notice:delete删除公告

分页查询参数

参数类型说明
pageNoint页码
pageSizeint每页条数
titlestr标题(模糊查询)
typeint类型:1-通知 2-公告
statusint状态:1-正常 2-停用

富文本内容处理

公告内容使用富文本编辑器,支持 HTML 格式:

python
# 添加公告时,content 字段接收 HTML 内容
Notice.objects.create(
    title="系统升级通知",
    type=1,
    status=1,
    content="<p>系统将于<strong>2026-09-10</strong>进行升级维护...</p>",
    create_user=get_username(request)
)

XSS 防护

富文本内容存储前需进行 XSS 过滤,防止恶意脚本注入。项目内置了 utils/common.py 中的 clean_html() 函数用于过滤危险标签。

链接管理

链接模型

python
# application/link/models.py
from application.models import BaseModel

class Link(BaseModel):
    """友情链接模型类"""
    class Meta:
        db_table = 'django_link'

    name = models.CharField(max_length=255, verbose_name='链接名称')
    image = models.CharField(max_length=255, null=True, blank=True, verbose_name='链接图片')
    url = models.CharField(max_length=255, null=True, blank=True, verbose_name='链接地址')
    status = models.IntegerField(default=1, verbose_name='链接状态:1-正常 2-停用')
    sort = models.IntegerField(default=0, verbose_name='排序')
    note = models.CharField(max_length=255, null=True, blank=True, verbose_name='备注')

字段说明

字段类型说明
namestr链接名称
imagestr链接 Logo 图片路径
urlstr链接地址
statusint状态:1-正常 2-停用
sortint排序权重(数字越小越靠前)
notestr备注信息

API 接口

接口方法权限节点说明
/link/pageGETsys:link:page链接分页列表
/link/detail/<int:id>GETsys:link:detail链接详情
/link/addPOSTsys:link:add新增链接
/link/updatePUTsys:link:update编辑链接
/link/delete/<int:id>DELETEsys:link:delete删除链接
/link/statusPUTsys:link:status设置状态

分页查询参数

参数类型说明
pageNoint页码
pageSizeint每页条数
namestr链接名称(模糊查询)
statusint状态:1-正常 2-停用

响应示例

json
{
    "code": 0,
    "data": {
        "records": [
            {
                "id": 1,
                "name": "Django 官方网站",
                "image": "/uploads/link/django.png",
                "url": "https://www.djangoproject.com",
                "status": 1,
                "statusText": "正常",
                "sort": 1,
                "note": "Python Web 框架",
                "createUser": "admin",
                "createTime": "2026-09-08 10:00:00"
            }
        ],
        "total": 10,
        "size": 10,
        "current": 1,
        "pages": 1
    },
    "msg": "操作成功",
    "ok": true
}

通用模式

两个模块均遵循相同的开发模式:

1. models.py:继承 BaseModel,定义业务字段
2. forms.py:继承 Django Form,定义字段约束和验证规则
3. services.py:实现 CRUD 业务逻辑函数
4. views.py:PermissionRequired + check_login 装饰器
5. urls.py:路由配置,映射 URL 到视图类

文件结构

application/notice/              application/link/
├── models.py                    ├── models.py
├── forms.py                     ├── forms.py
├── services.py                  ├── services.py
├── views.py                     ├── views.py
├── urls.py                      ├── urls.py
├── apps.py                      ├── apps.py
└── admin.py                     └── admin.py

前端实现

公告编辑弹窗

公告编辑使用富文本编辑器,支持图片上传:

vue
<template>
    <BasicModal @register="registerModal" @ok="handleSubmit">
        <BasicForm @register="registerForm" />
        <!-- 富文本编辑器 -->
        <div class="editor-container">
            <Toolbar :editor="editorRef" />
            <Editor v-model="content" :defaultConfig="editorConfig" />
        </div>
    </BasicModal>
</template>

链接列表页

链接列表页使用 BasicTable 组件,支持状态切换和排序:

vue
<template>
    <PageWrapper>
        <BasicForm @register="registerSearch" />
        <BasicTable @register="registerTable">
            <template #tableTitle>
                <el-button type="primary" @click="handleAdd">新增链接</el-button>
            </template>
        </BasicTable>
    </PageWrapper>
</template>

总结

内容管理模块具备以下特点:

1. 简单 CRUD:标准增删改查接口,遵循五层架构
2. 公告管理:支持富文本内容、封面图片、类型区分(通知/公告)
3. 链接管理:友情链接,支持 Logo 图片、排序权重、状态管理
4. 统一模式:models/forms/services/views/urls 五层结构
5. XSS 防护:富文本内容自动过滤危险标签
6. 状态管理:支持启用/停用状态切换

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