DJCMS 使用文档
DJCMS 内容管理系统的完整使用指南,涵盖安装部署、后台管理、前台使用及API接口等全部功能。
快速开始
1.1 安装部署
环境要求
- Python 3.11 或更高版本
- pip 包管理器
安装步骤
第一步:获取项目代码
bashgit clone <项目仓库地址>
cd djcms
第二步:创建虚拟环境
bashpython -m venv venv
# macOS/Linux
source venv/bin/activate
# Windows
venv\Scripts\activate
第三步:安装依赖
bashpip install django django-ckeditor django-ckeditor-uploader django-taggit \
djangorestframework django-cors-headers django-allauth Pillow
第四步:初始化数据库
bashpython manage.py migrate
执行后会自动创建 db.sqlite3 数据库文件和所有数据表。
第五步:加载初始数据
bashpython seed_data.py
此脚本会创建:
- 8个内容分类(技术前沿、生活随笔、设计创意等)
- 2个示例页面(关于我们、隐私政策)
- 主导航菜单
- 站点基础设置
第六步:创建管理员账号
bashpython manage.py createsuperuser
按提示输入用户名、邮箱和密码。
第七步:启动服务器
bashpython manage.py runserver 0.0.0.0:8000
第八步:访问系统
| 页面 | 地址 |
|---|---|
| 前台首页 | http://localhost:8000/ |
| 管理后台 | http://localhost:8000/cms-admin/dashboard/ |
| Django Admin | http://localhost:8000/admin/ |
1.2 生成测试数据(可选)
如需快速填充大量文章用于测试:
bashpython manage.py generate_articles
此命令会生成约150篇涵盖各分类的测试文章。
管理后台
2.1 登录后台
- 访问 http://localhost:8000/admin/login/
- 输入创建的管理员用户名和密码
- 登录成功后自动跳转至控制台仪表盘
2.2 控制台仪表盘
仪表盘是管理后台的首页,提供站点运营的全局概览。
统计卡片
页面顶部展示8个核心指标:
| 指标 | 说明 |
|---|---|
| 文章总数 | 所有状态的文章数量 |
| 分类数 | 活跃分类数量 |
| 媒体数 | 媒体库文件总数 |
| 总浏览量 | 所有文章的浏览量之和 |
| 评论数 | 评论总数(含待审核) |
| 订阅数 | 活跃邮件订阅者数量 |
| 页面数 | 已发布页面数量 |
| 通知数 | 未读通知数量 |
快捷操作
提供5个常用操作的快捷入口:
- ✍️ 写文章 — 跳转至文章创建页面
- 📁 添加分类 — 跳转至分类创建页面
- 📷 上传媒体 — 跳转至媒体上传页面
- 📄 新建页面 — 跳转至页面创建页面
- ⚙️ 系统设置 — 跳转至站点设置页面
数据图表
4个 Chart.js 可视化图表:
| 图表 | 类型 | 说明 |
|---|---|---|
| 发布趋势 | 折线图 | 最近30天的文章发布数量 |
| 文章状态 | 饼图 | 草稿/已发布/已归档的比例 |
| 分类分布 | 饼图 | 各分类的文章数量 |
| 媒体类型 | 柱状图 | 图片/文档/视频/音频/其他的数量 |
最近动态
- 最近文章 — 最新发布的8篇文章
- 最新评论 — 最新的6条评论
2.3 侧边栏导航
侧边栏按功能分组:
| 分组 | 菜单项 | 说明 |
|---|---|---|
| 概览 | 控制台 | 返回仪表盘 |
| 内容管理 | 文章管理 | 文章列表和增删改查 |
| 页面管理 | 页面列表和增删改查 | |
| 分类管理 | 分类列表和增删改查 | |
| 评论管理 | 评论审核和管理 | |
| 媒体库 | 媒体文件管理 | |
| 系统 | 邮件订阅 | 订阅者管理 |
| 通知管理 | 通知的增删改查 | |
| 内容块 | 可复用内容片段 | |
| URL重定向 | 重定向规则管理 | |
| 作者档案 | 作者资料管理 | |
| 用户管理 | 系统用户管理 | |
| 用户组 | 用户组管理 | |
| 站点设置 | 全局站点配置 |
2.4 退出登录
点击侧边栏底部的用户名区域,然后点击「退出登录」按钮。
文章管理
3.1 文章列表
进入方式:侧边栏 → 内容管理 → 文章管理
列表功能
- 搜索:在搜索框输入关键词,搜索文章标题、内容和摘要
- 筛选:使用右侧筛选器按状态、推荐、分类、发布日期筛选
- 排序:点击列标题按该字段排序
批量操作
- 勾选要操作的文章(可勾选全选框)
- 在列表上方的操作下拉框中选择操作
- 点击「执行」
| 操作 | 说明 |
|---|---|
| 设为已发布 | 将选中的草稿文章发布 |
| 设为草稿 | 将选中的文章改为草稿状态 |
| 设为推荐 | 将选中的文章标记为推荐 |
| 取消推荐 | 取消选中文章的推荐标记 |
| 导出选中文章(JSON) | 导出为JSON格式文件 |
| 导出选中文章(CSV) | 导出为CSV格式文件(可用Excel打开) |
3.2 创建文章
进入方式:文章列表页右上角点击「增加文章」按钮
填写步骤
第一步:基本信息
| 字段 | 是否必填 | 说明 |
|---|---|---|
| 标题 | ✅ | 文章标题,最多200字符 |
| URL别名 | ✅ | 自动从标题生成,可手动修改 |
| 内容 | ✅ | 使用CKEditor富文本编辑器编写 |
| 摘要 | ❌ | 简短描述,留空则自动截取内容前200字符 |
| 特色图片 | ❌ | 上传文章封面图 |
CKEditor编辑器工具栏说明:
| 工具组 | 功能 |
|---|---|
| 文档 | 源代码编辑、预览、打印、模板 |
| 剪贴板 | 剪切、复制、粘贴、撤销、重做 |
| 基本样式 | 加粗、斜体、下划线、删除线 |
| 段落 | 有序/无序列表、缩进、引用、对齐 |
| 链接 | 插入链接、取消链接、锚点 |
| 插入 | 图片、表格、水平线、特殊字符 |
| 样式 | 样式、格式、字体、字号 |
| 颜色 | 文字颜色、背景色 |
第二步:分类与标签
| 字段 | 是否必填 | 说明 |
|---|---|---|
| 分类 | ❌ | 选择文章所属分类 |
| 标签 | ❌ | 输入标签,用逗号分隔;输入时会出现已有标签的自动补全 |
第三步:发布设置
| 字段 | 是否必填 | 说明 |
|---|---|---|
| 状态 | ✅ | 草稿/已发布/已归档 |
| 启用 | ✅ | 是否在前台显示 |
| 推荐 | ❌ | 勾选后文章在首页推荐区展示 |
| 允许评论 | ✅ | 是否允许访客评论 |
| 作者 | ❌ | 留空则自动设为当前登录用户 |
| 发布时间 | ✅ | 默认为当前时间 |
第四步:SEO设置(可选)
展开「SEO设置」折叠区域:
| 字段 | 说明 |
|---|---|
| SEO标题 | 搜索引擎显示的标题,留空则使用文章标题 |
| SEO描述 | 搜索引擎显示的描述,留空则使用摘要 |
| SEO关键词 | 逗号分隔的关键词 |
第五步:保存
- 点击「保存」— 保存并留在当前页面
- 点击「保存并继续编辑」— 保存后继续编辑
- 点击「保存并添加另一个」— 保存后跳转至新建页面
3.3 编辑文章
- 在文章列表中点击文章标题
- 修改需要更新的字段
- 点击保存
3.4 删除文章
- 在文章列表中勾选要删除的文章
- 在操作下拉框中选择「删除选中 的 文章」
- 确认删除操作
⚠️ 删除操作不可恢复,请谨慎操作。
3.5 文章状态说明
| 状态 | 前台显示 | 说明 |
|---|---|---|
| 草稿 | ❌ 不显示 | 正在编辑中,尚未发布 |
| 已发布 | ✅ 显示 | 已公开发布,所有人可见 |
| 已归档 | ❌ 不显示 | 已下架归档,不再公开展示 |
页面管理
4.1 页面与文章的区别
| 特性 | 文章 | 页面 |
|---|---|---|
| 用途 | 博客/新闻类内容 | 静态内容(关于我们、隐私政策等) |
| 分类 | 归属分类 | 无分类 |
| 标签 | 支持标签 | 无标签 |
| 评论 | 支持评论 | 无评论 |
| 首页 | 不能设为首页 | 可以设为首页 |
| URL格式 | /articles/年/月/日/slug/ | /<slug>/ |
| 导航显示 | 不自动显示 | 自动出现在导航栏和底部 |
4.2 创建页面
进入方式:侧边栏 → 内容管理 → 页面管理 → 点击「增加页面」
| 字段 | 是否必填 | 说明 |
|---|---|---|
| 标题 | ✅ | 页面标题 |
| URL别名 | ✅ | 自动生成,如 about、privacy |
| 内容 | ✅ | CKEditor富文本编辑 |
| 摘要 | ❌ | 页面简短描述 |
| 特色图片 | ❌ | 页面封面图 |
| 状态 | ✅ | 草稿/已发布 |
| 启用 | ✅ | 是否启用 |
| 设为首页 | ❌ | 勾选后该页面成为网站首页 |
| 模板 | ✅ | 默认 cms_front/page.html |
| 作者 | ❌ | 留空自动设为当前用户 |
4.3 设为首页
- 编辑要设为首页的页面
- 勾选「设为首页」
- 保存
💡 系统保证只有一个页面为首页。设为新首页时,旧首页会自动取消。
4.4 页面导航
已发布且启用的页面(非首页)会自动出现在:
- 前台顶部导航栏(在「分类」和「联系我们」之间)
- 前台底部「快速链接」区域
无需手动添加导航链接。
分类管理
5.1 创建分类
进入方式:侧边栏 → 内容管理 → 分类管理 → 点击「增加分类」
| 字段 | 是否必填 | 说明 |
|---|---|---|
| 分类名称 | ✅ | 如"技术前沿"、"生活随笔" |
| URL别名 | ✅ | 自动生成,如 tech、life |
| 描述 | ❌ | 分类描述,显示在分类详情页 |
| 父分类 | ❌ | 选择父分类可创建子分类 |
| 图标 | ❌ | Font Awesome图标类名,如 fa-code、fa-heart |
| 排序 | ✅ | 数字越小越靠前,默认0 |
| 启用 | ✅ | 是否启用 |
5.2 创建子分类
- 创建新分类时,在「父分类」下拉框中选择上级分类
- 支持无限级嵌套
示例分类结构:
技术前沿 (tech)
├── Web开发 (web)
├── Python (python)
├── JavaScript (javascript)
└── 运维DevOps (devops)
生活随笔 (life)
设计创意 (design)
教程资源 (tutorial)
5.3 分类图标
图标字段填写 Font Awesome 6 的图标类名。
常用图标参考:
| 分类 | 图标类名 |
|---|---|
| 技术 | fa-code |
| Python | fa-python (品牌图标 fab fa-python) |
| 设计 | fa-palette |
| 生活 | fa-heart |
| 教程 | fa-graduation-cap |
| 运维 | fa-server |
| Web | fa-globe |
| 数据库 | fa-database |
完整图标列表:https://fontawesome.com/icons
媒体库
6.1 上传媒体
方式一:通过媒体库页面上传
- 进入侧边栏 → 内容管理 → 媒体库
- 点击「增加媒体」按钮
- 填写信息并上传文件
方式二:在编辑器中上传
- 在文章/页面的CKEditor编辑器中点击「图片」按钮
- 点击「上传」标签页
- 选择本地图片文件
- 点击「上传到服务器」
6.2 媒体信息
| 字段 | 说明 |
|---|---|
| 标题 | 媒体文件名称 |
| 文件 | 上传的文件(支持图片/文档/视频/音频) |
| 缩略图 | 可单独上传缩略图 |
| 类型 | 图片/文档/视频/音频/其他 |
| 替代文本 | 图片的alt属性,用于无障碍访问和SEO |
| 说明 | 图片的caption说明 |
| 描述 | 详细描述 |
6.3 文件上传路径
| 类型 | 存储路径 |
|---|---|
| 文章特色图片 | media/articles/ |
| 页面特色图片 | media/pages/ |
| 编辑器上传 | media/uploads/年/月/ |
| 缩略图 | media/uploads/thumbnails/ |
| 作者头像 | media/avatars/ |
| 站点Logo | media/settings/ |
6.4 在文章中插入图片
- 在CKEditor编辑器中点击「图片」按钮
- 选择「上传」标签页,上传本地图片
- 或选择「URL」标签页,输入图片地址
- 设置图片属性(宽度、替代文本等)
- 点击「确定」插入
评论管理
7.1 评论流程
访客提交评论 → 评论状态为「待审核」 → 管理员审核 → 评论在前台显示
7.2 审核评论
- 进入侧边栏 → 内容管理 → 评论管理
- 查看待审核评论(筛选「待审核」)
- 对单条评论:点击评论进入编辑页,修改「已审核」字段
- 批量审核:勾选评论 → 选择「审核通过」→ 执行
7.3 评论管理操作
| 操作 | 说明 |
|---|---|
| 审核通过 | 评论在前台文章下方显示 |
| 取消审核 | 评论从前台隐藏 |
| 删除 | 永久删除评论 |
7.4 评论开关
在站点设置中可以全局开启/关闭评论功能:
- 进入侧边栏 → 系统 → 站点设置
- 找到「系统设置」区域
- 勾选/取消「启用评论」
也可以在单篇文章中控制:
- 编辑文章时,勾选/取消「允许评论」
导航菜单
8.1 菜单概念
系统使用「菜单 → 菜单项」的两层结构:
- 菜单:导航容器,如"主导航"
- 菜单项:具体的导航链接,如"首页"、"关于我们"
8.2 创建菜单
- 进入侧边栏 → 系统 → 菜单管理(在Django Admin中)
- 点击「增加菜单」
- 填写名称和URL别名(如
main) - 保存
8.3 添加菜单项
方式一:内联编辑
- 编辑菜单时,在页面下方的「菜单项」内联区域
- 点击「增加菜单项」
- 填写标题、链接类型、排序等
- 保存
方式二:单独创建
- 在菜单项列表页点击「增加菜单项」
- 填写以下信息:
| 字段 | 说明 |
|---|---|
| 菜单 | 选择所属菜单 |
| 父菜单项 | 选择父级可创建下拉子菜单 |
| 标题 | 显示文字,如"关于我们" |
| 链接类型 | 页面/文章/分类/自定义链接 |
| 链接URL | 仅自定义链接类型需要填写 |
| 关联页面/文章/分类 | 根据链接类型选择对应内容 |
| 图标 | Font Awesome图标类名 |
| 打开方式 | 当前窗口/新窗口 |
| 排序 | 数字越小越靠前 |
| 启用 | 是否显示 |
8.4 链接类型说明
| 类型 | 说明 | URL示例 |
|---|---|---|
| 页面 | 链接到已发布的页面 | /about/ |
| 文章 | 链接到已发布的文章 | /articles/2024/01/15/hello/ |
| 分类 | 链接到分类详情页 | /category/python/ |
| 自定义链接 | 手动输入任意URL | https://example.com |
8.5 创建下拉菜单
- 先创建父菜单项(如"技术")
- 创建子菜单项时,在「父菜单项」中选择"技术"
- 前台会自动渲染为下拉菜单
站点设置
9.1 访问站点设置
进入方式:侧边栏 → 系统 → 站点设置
💡 站点设置为单例模式,全局只有一份配置。首次访问时自动创建。
9.2 设置项详解
基本信息
| 设置项 | 说明 | 示例 |
|---|---|---|
| 站点名称 | 显示在导航栏和标题 | 我的博客 |
| 站点描述 | 网站简短描述 | 一个关于技术的博客 |
| Logo | 站点Logo图片 | 上传图片 |
| Favicon | 浏览器标签页图标 | 上传.ico或.png |
| 页脚文本 | 底部版权信息 | © 2024 我的博客 |
SEO设置
| 设置项 | 说明 |
|---|---|
| 默认SEO标题 | 全局默认的页面标题 |
| 默认SEO描述 | 全局默认的页面描述 |
| 默认SEO关键词 | 全局默认的关键词 |
💡 文章/页面/分类的独立SEO设置会覆盖全局默认值。
联系方式
| 设置项 | 说明 |
|---|---|
| 联系邮箱 | 显示在联系页面和页脚 |
| 联系电话 | 显示在联系页面 |
| 联系地址 | 显示在联系页面 |
社交媒体
| 设置项 | 说明 |
|---|---|
| Facebook页面URL | |
| Twitter/X | Twitter个人页URL |
| Instagram页面URL | |
| LinkedIn页面URL | |
| YouTube | YouTube频道URL |
| GitHub | GitHub页面URL |
💡 留空的社交链接不会在前台显示。
分析与追踪
| 设置项 | 说明 |
|---|---|
| Google Analytics ID | GA追踪ID,如 G-XXXXXXXXXX |
| 自定义Head HTML | 在 </head> 前注入的代码 |
| 自定义Footer HTML | 在 </body> 前注入的代码 |
自定义HTML的常见用途:
- 添加百度统计代码
- 添加Google Tag Manager
- 添加自定义CSS/JS
- 添加第三方插件代码
邮件订阅
| 设置项 | 说明 |
|---|---|
| 启用邮件订阅 | 开启/关闭前台订阅功能 |
| 订阅说明 | 显示在订阅表单旁的说明文字 |
邮件服务器
| 设置项 | 说明 | 常用值 |
|---|---|---|
| SMTP服务器 | 邮件服务器地址 | smtp.gmail.com |
| SMTP端口 | 服务器端口 | 587(TLS) / 465(SSL) |
| SMTP用户 | 登录用户名 | your@gmail.com |
| SMTP密码 | 登录密码 | — |
| 使用TLS | 是否启用TLS加密 | ✅ 推荐 |
| 通知邮箱 | 接收通知的邮箱 | admin@example.com |
常用SMTP配置:
| 邮件服务 | SMTP服务器 | 端口 | TLS |
|---|---|---|---|
| Gmail | smtp.gmail.com | 587 | ✅ |
| QQ邮箱 | smtp.qq.com | 587 | ✅ |
| 163邮箱 | smtp.163.com | 465/994 | ✅ |
| 阿里企业邮 | smtp.mxhichina.com | 465 | ✅ |
系统设置
| 设置项 | 说明 | 默认值 |
|---|---|---|
| 每页文章数 | 文章列表每页显示数量 | 10 |
| 启用评论 | 全局评论开关 | ✅ |
| 维护模式 | 开启后前台显示维护页面 | ❌ |
| 缓存时间 | 缓存过期时间(秒) | 300 |
| 启用暗色模式 | 前台暗色模式开关 | ❌ |
| 启用延迟加载 | 图片延迟加载 | ✅ |
9.3 保存设置
- 修改需要更新的设置项
- 点击页面底部的「保存设置」按钮
- 页面提示「站点设置已保存!」即表示成功
邮件订阅
10.1 前台订阅
访客可以在前台页脚的订阅区域输入邮箱地址,点击订阅按钮完成订阅。
订阅流程:
- 访客输入邮箱 → AJAX提交 → 返回成功/失败提示
- 订阅成功后,邮箱记录到数据库
- 如果邮箱已订阅,提示「该邮箱已订阅」
10.2 管理订阅者
进入方式:侧边栏 → 系统 → 邮件订阅
| 操作 | 说明 |
|---|---|
| 查看列表 | 查看所有订阅者 |
| 筛选 | 按激活状态、订阅时间筛选 |
| 搜索 | 按邮箱搜索 |
| 导出CSV | 勾选订阅者 → 选择「导出选中的订阅者(CSV)」→ 执行 |
10.3 退订
访客可以通过退订链接取消订阅:
- 每个订阅者有唯一的验证令牌
- 访问
/newsletter/unsubscribe/<token>/即可退订 - 退订后邮箱记录保留,状态变为「未激活」
URL重定向
11.1 创建重定向规则
进入方式:侧边栏 → 系统 → URL重定向 → 点击「增加URL重定向」
| 字段 | 说明 | 示例 |
|---|---|---|
| 原路径 | 旧URL路径 | /old-page/ |
| 新路径 | 目标URL | /new-page/ 或 https://example.com |
| 重定向类型 | 301永久 / 302临时 | 301 |
| 启用 | 是否生效 | ✅ |
11.2 重定向类型选择
| 类型 | HTTP状态码 | 适用场景 |
|---|---|---|
| 301永久重定向 | 301 | 页面永久迁移,SEO权重转移 |
| 302临时重定向 | 302 | 临时跳转,如活动页面 |
11.3 工作原理
URL重定向中间件在每次请求时自动检查:
- 跳过
/admin/、/cms-admin/、/api/、/ckeditor/、/static/、/media/路径 - 匹配到活跃规则时,自动递增命中次数并执行重定向
- 未匹配则正常处理请求
11.4 常见用途
- 旧文章URL迁移到新URL
- 网站改版后的URL变更
- 短链接跳转
- 域名内页面迁移
内容块
12.1 什么是内容块
内容块是可复用的内容片段,可以在模板中按需加载,用于侧边栏、横幅广告、页脚等区域。
12.2 内容块类型
| 类型 | 说明 | 使用场景 |
|---|---|---|
| HTML | 自定义HTML代码 | 广告代码、自定义组件 |
| 纯文本 | 普通文本内容 | 公告、提示信息 |
| 横幅广告 | 含图片和链接 | 广告横幅 |
| 侧边栏 | 侧边栏内容 | 推荐阅读、热门文章 |
| 页脚 | 页脚区域内容 | 友情链接、合作伙伴 |
12.3 创建内容块
- 进入侧边栏 → 系统 → 内容块 → 点击「增加内容块」
- 填写信息:
| 字段 | 说明 |
|---|---|
| 名称 | 内容块名称,如"侧边栏公告" |
| 标识符 | 唯一标识,如 sidebar-notice |
| 类型 | 选择内容块类型 |
| 内容 | HTML或文本内容 |
| 图片 | 横幅类型的图片 |
| 链接URL | 横幅点击跳转的URL |
| 排序 | 数字越小越靠前 |
| 启用 | 是否生效 |
通知系统
13.1 通知类型
| 类型 | 颜色 | 说明 |
|---|---|---|
| 信息(info) | 蓝色 | 一般信息通知 |
| 成功(success) | 绿色 | 操作成功通知 |
| 警告(warning) | 黄色 | 需要注意的事项 |
| 错误(danger) | 红色 | 错误或异常通知 |
13.2 创建通知
- 进入侧边栏 → 系统 → 通知管理 → 点击「增加通知」
- 填写信息:
| 字段 | 说明 |
|---|---|
| 标题 | 通知标题 |
| 消息 | 通知详细内容 |
| 类型 | info/success/warning/danger |
| 用户 | 留空则为全局通知 |
| 链接 | 点击通知跳转的URL |
13.3 通知显示
- 管理员登录后,导航栏右侧显示未读通知数量(红色badge)
- 批量操作:勾选通知 → 标记已读/标记未读
作者档案
14.1 创建作者档案
- 进入侧边栏 → 系统 → 作者档案 → 点击「增加作者档案」
- 选择关联的用户账号
- 填写扩展信息:
| 字段 | 说明 |
|---|---|
| 头像 | 作者头像图片 |
| 职位 | 如"高级工程师"、"产品经理" |
| 个人简介 | 详细的自我介绍 |
| 个人网站 | 博客或个人主页URL |
| 公开邮箱 | 是否在前台显示邮箱 |
| Twitter用户名 | |
| GitHub | GitHub用户名 |
14.2 作者详情页
前台提供作者详情页 /author/<username>/,展示:
- 作者头像、姓名、职位
- 个人简介
- 社交链接
- 已发布文章数和总浏览量
- 作者的文章列表
前台使用
15.1 首页
首页展示以下内容:
| 区域 | 说明 |
|---|---|
| 推荐文章 | 1篇大图+3篇小图的推荐文章展示区 |
| 最新文章 | 9篇最新文章的卡片网格 |
| 分类探索 | 8个分类卡片 |
| 标签云 | 15个热门标签 |
| 统计栏 | 文章数、分类数、浏览量、作者数 |
| 投稿区 | 号召性用语区域 |
💡 如果设置了自定义首页(页面管理中勾选「设为首页」),首页将显示该页面内容。
15.2 文章列表
访问 /articles/ 查看所有已发布文章。
筛选功能:
| 筛选方式 | 操作 |
|---|---|
| 按分类 | 点击右侧栏分类列表中的分类名 |
| 按标签 | 点击标签云中的标签 |
| 按搜索 | 在搜索框输入关键词 |
| 按日期 | 点击右侧栏归档列表中的月份 |
右侧栏内容:
- 分类列表(含文章数)
- 近期文章(最新5篇)
- 归档(最近12个月)
- 标签云
15.3 文章详情
文章详情页包含:
| 区域 | 说明 |
|---|---|
| 面包屑 | 首页 › 文章标题 |
| 文章标题 | 大标题 |
| 元信息 | 作者、日期、分类、阅读时间、浏览量 |
| 特色图 | 文章封面大图 |
| 目录 | 自动从h2/h3标题生成 |
| 正文 | 富文本内容 |
| 标签 | 文章标签列表 |
| 社交分享 | Twitter/Facebook/LinkedIn/WhatsApp/Telegram/复制链接 |
| 作者卡 | 作者头像、简介、社交链接 |
| 上下篇 | 上一篇文章和下一篇文章 |
| 相关文章 | 同分类的3篇相关文章 |
| 评论区 | 已审核评论列表和评论表单 |
15.4 搜索
- 在导航栏搜索框输入关键词
- 或访问
/search/?q=关键词 - 搜索范围:文章标题、内容、摘要
- 关键词最少2个字符
15.5 联系我们
访问 /contact/ 页面:
左侧:联系信息(邮箱、电话、地址、社交链接)
右侧:联系表单
| 字段 | 说明 |
|---|---|
| 姓名 | 必填,至少2字符 |
| 邮箱 | 必填 |
| 主题 | 必填 |
| 消息 | 必填,至少10字符 |
提交后系统会发送邮件至站点设置中的通知邮箱。
15.6 邮件订阅
在页脚区域找到订阅表单:
- 输入邮箱地址
- 点击订阅按钮
- 系统提示订阅成功/失败
15.7 暗色模式
在站点设置中启用暗色模式后,前台自动切换为深色主题。
API使用
16.1 API基础
Base URL:http://localhost:8000/api/
认证方式:
| 方式 | 说明 |
|---|---|
| Session认证 | 登录后自动携带Cookie |
| Basic认证 | HTTP Basic Auth |
响应格式:JSON
分页:默认每页20条,通过 ?page=N 翻页
16.2 文章接口
获取文章列表
bashcurl http://localhost:8000/api/articles/
筛选参数:
bash# 按分类
curl "http://localhost:8000/api/articles/?category=python"
# 按标签
curl "http://localhost:8000/api/articles/?tag=Django"
# 按作者
curl "http://localhost:8000/api/articles/?author=1"
# 搜索
curl "http://localhost:8000/api/articles/?search=Python"
# 仅推荐
curl "http://localhost:8000/api/articles/?featured=true"
获取文章详情
bashcurl http://localhost:8000/api/articles/<slug>/
创建文章(需认证)
bashcurl -X POST http://localhost:8000/api/articles/ \
-H "Content-Type: application/json" \
-u admin:password \
-d '{
"title": "新文章",
"slug": "new-article",
"content": "<p>文章内容</p>",
"status": "published",
"category": 1
}'
浏览量递增
bashcurl -X POST http://localhost:8000/api/articles/<slug>/increment_view/
文章归档
bashcurl http://localhost:8000/api/articles/archive/
返回按年月分组的文章数量。
16.3 分类接口
bash# 列表
curl http://localhost:8000/api/categories/
# 仅顶级分类
curl "http://localhost:8000/api/categories/?parent=null"
# 详情
curl http://localhost:8000/api/categories/<slug>/
16.4 页面接口
bash# 列表
curl http://localhost:8000/api/pages/
# 详情
curl http://localhost:8000/api/pages/<slug>/
# 浏览量递增
curl -X POST http://localhost:8000/api/pages/<slug>/increment_view/
16.5 评论接口
bash# 获取评论列表
curl http://localhost:8000/api/comments/
# 创建评论(无需认证)
curl -X POST http://localhost:8000/api/comments/ \
-H "Content-Type: application/json" \
-d '{
"article": 1,
"author_name": "访客",
"author_email": "visitor@example.com",
"content": "很棒的文章!"
}'
💡 通过API创建的评论默认为待审核状态。
16.6 站点统计
bashcurl http://localhost:8000/api/stats/
返回:
json{
"total_articles": 158,
"published_articles": 145,
"total_categories": 8,
"total_comments": 10,
"total_views": 50000,
"total_subscribers": 25,
"total_pages": 2,
"total_media": 15
}
16.7 全局搜索
bashcurl "http://localhost:8000/api/search/?q=Python"
同时搜索文章和页面,返回合并结果。
16.8 媒体接口(仅管理员)
bash# 列表
curl -u admin:password http://localhost:8000/api/media/
# 上传
curl -X POST http://localhost:8000/api/media/ \
-u admin:password \
-F "title=测试图片" \
-F "file=@/path/to/image.png" \
-F "media_type=image"
16.9 站点设置接口(仅管理员)
bash# 读取
curl -u admin:password http://localhost:8000/api/settings/
# 修改
curl -X PATCH http://localhost:8000/api/settings/ \
-u admin:password \
-H "Content-Type: application/json" \
-d '{"site_name": "新站点名称"}'
SEO优化
17.1 全局SEO
在站点设置中配置全局默认值:
- 进入站点设置 → SEO设置区域
- 填写默认SEO标题、描述、关键词
- 保存
17.2 单页SEO
每篇文章、页面、分类都可以独立配置SEO:
- 编辑内容时,展开「SEO设置」折叠区域
- 填写SEO标题、描述、关键词
- 单页SEO设置优先于全局默认值
SEO标题建议:
- 格式:
文章标题 - 站点名称 - 长度:50-60字符
SEO描述建议:
- 包含关键词
- 长度:120-160字符
- 吸引用户点击
17.3 URL优化
- 使用有意义的slug(URL别名)
- 创建文章时slug自动从标题生成
- 可手动修改为更简洁的URL
好的slug示例:
django-tutorial✅python-async-programming✅
不好的slug示例:
article-123❌post-2024-01-15❌
17.4 站点地图
系统自动生成 sitemap.xml,包含:
- 所有已发布文章
- 所有已发布页面
- 所有活跃分类
- 静态页面(首页、文章列表、联系我们)
访问地址:http://localhost:8000/sitemap.xml
提交到搜索引擎:
- Google Search Console:https://search.google.com/search-console
- Bing Webmaster Tools:https://www.bing.com/webmasters
17.5 自定义Head/Footer代码
在站点设置的「分析与追踪」区域:
Google Analytics示例:
html<!-- Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
</script>
百度统计示例:
html<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?YOUR_ID";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
常见问题
Q1:登录后跳转到了Django默认Admin,而不是自定义后台?
A:直接访问 http://localhost:8000/cms-admin/dashboard/ 即可进入自定义管理后台。系统默认登录跳转到 /cms-admin/dashboard/。
Q2:前台导航栏没有显示新创建的页面?
A:请确认:
- 页面状态为「已发布」
- 页面「启用」已勾选
- 页面「设为首页」未勾选(首页不会出现在导航栏)
Q3:评论提交后在前台看不到?
A:评论默认需要审核。在后台「评论管理」中审核通过后才会显示。
Q4:如何修改站点名称和Logo?
A:进入侧边栏 → 系统 → 站点设置 → 基本信息 区域,修改站点名称和上传Logo。
Q5:文章编辑器中上传图片失败?
A:请确认:
- 已安装 Pillow:
pip install Pillow media/目录有写入权限- settings.py 中
CKEDITOR_UPLOAD_PATH配置正确
Q6:如何批量发布文章?
A:在文章列表页:
- 勾选要发布的文章
- 在操作下拉框中选择「设为已发布」
- 点击「执行」
Q7:如何导出文章数据?
A:在文章列表页:
- 勾选要导出的文章
- 选择「导出选中文章(JSON)」或「导出选中文章(CSV)」
- 点击「执行」,浏览器会下载文件
Q8:联系表单提交后没有收到邮件?
A:请检查:
- 站点设置中的「通知邮箱」是否已填写
- SMTP配置是否正确(开发环境邮件输出到控制台)
- 生产环境需要配置真实的SMTP服务器
Q9:如何开启暗色模式?
A:进入站点设置 → 系统设置 → 勾选「启用暗色模式」→ 保存。
Q10:如何添加新的管理用户?
A:
- 进入侧边栏 → 系统 → 用户管理
- 点击「增加用户」
- 填写用户名、密码
- 勾选「职员状态」(否则无法登录后台)
- 保存
Q11:前台搜索不到文章?
A:搜索范围仅限已发布且启用的文章。请确认文章状态为「已发布」且「启用」已勾选。
Q12:如何修改每页显示的文章数量?
A:进入站点设置 → 系统设置 → 修改「每页文章数」→ 保存。默认为10篇。
Q13:URL重定向不生效?
A:请确认:
- 重定向规则「启用」已勾选
- 原路径填写正确(需包含前后的
/) /admin/、/api/等路径不会被重定向
Q14:如何删除站点设置重新配置?
A:站点设置为单例模式,不支持删除。直接修改保存即可覆盖。
Q15:数据库文件在哪里?
A:开发环境使用 SQLite,数据库文件位于项目根目录的 db.sqlite3。