# 项目立项与需求分析
## 项目简介
- 项目名称:Shell Blog
- 描述:类似终端的个人博客文章发布系统
- 面向用户:对终端风格博客感兴趣的人
- 项目背景:Blog 系统对于现在市面上来说,什么样式的都有,已经不算新鲜的玩意儿。但是本人想做一款终端风格的 Blog 系统,用来装载知识笔记,同时作为第一次开发的项目来说,用于提升自己的开发技能和了解软件的开发流程,并且熟悉软件设计的规范。
- 主要功能:
1. 主页展示文章
2. 文章元数据管理
- 分类管理
- 标签管理
3. 富文本编辑文章
- 支持图片上传
- 支持草稿状态(已发布、草稿、回收站)
4. 文章状态与删除
- 草稿箱(草稿状态)
- 回收站(逻辑删除)
- 永久删除(物理删除)
5. 用户登录与权限系统
- 普通用户登录
- 管理员登录
- 权限区分(后台操作权限)
6. 文章互动(点赞 + 收藏)
- 用户点赞
- 用户收藏
7. 文章搜索
- 标题搜索
- 内容搜索
- 标签/分类搜索
## 需求分析
### 功能性需求
- 用户管理(后台)
1. 用户账号管理(创建 / 编辑 / 封禁 / 删除(逻辑删除)/ 查看 / 排序)
2. 角色与权限管理(角色管理、权限分配、权限提升)
- 认证与登录(前端)
1. 用户注册(用户名、邮箱、密码、性别、头像、签名)
2. 用户登录(邮箱或用户名登录、记住我)
3. 忘记/重置密码(邮箱找回、一次性链接)
- 文章管理(后台)
1. 文章发布(支持标签、分类、草稿)
2. 文章编辑(标题、正文、标签、分类、发布状态)
3. 文章删除(软删除到回收站;支持批量删除)
4. 文章搜索与过滤(标题、标签、分类、作者、全文)
5. 批量操作(批量恢复、批量修改标签/分类)
- 首页文章/展示与互动(前端)
1. 首页顶部导航栏显示分类(左边网站中文logo采用特殊字体 中间为文章分类 右边是用户头像,点击用户头像有下拉列表个人资料/收藏点赞记录/后台管理/退出登录)
2. 首页全屏banner图(撑满宽度,banner图有动态文字淡入淡出效果,banner图要有透明感高斯模糊)
3. 首页文章展示(最新 / 热门 / 推荐 / 分类模块)
4. 列表排序(发布日期、点赞量、收藏量、访问量)
5. 文章显示布局(正方形圆角\文章标题\标签\分类\作者\点赞量\发布时间\PC端每行5篇,其余设备自适应,手机端一行只显示两篇,首页只显示25篇文章,超过限制用翻页器)
6. 首页炫酷页脚(网站总访问量\友情链接等可以借鉴github优质博客的页脚)
7. 文章详情页面(显示文章标题/创建者/标签/分类/发布时间/右边小的侧边栏显示文字的h1-h3级别标题/文章内容块不管文章内容多少高度要固定(底部显示点赞收藏显示访问量)/评论区(条评论超出20条显示查看更多),评论可以进行回复)/推荐文章块显示布局和首页一样,显示一行即可/炫酷的页脚(首页页脚一样)
8. 文章互动:点赞(幂等 toggle)、收藏(幂等 toggle)、访问量(防刷)
9. 前端各种移动平台自适应(PC/MacOS/Android/IOS/IPad)
- 标签管理(后台)
1. 列表显示(标签名称、关联文章数、创建者、创建/修改时间)
2. 创建、编辑、删除(不删除文章,仅解除关联或标记)排序
- 分类管理(后台)
1. 列表显示(分类名称、关联文章数、创建者、创建/修改时间)
2. 创建、编辑、删除(不删除文章,仅解除关联或标记)排序
- 文章回收站(后台)
1. 展示被删除文章(标题、作者、删除者、删除时间)
2. 还原删除(恢复到原状态或草稿)
3. 彻底删除(物理删除,仅限管理员)
4. 回收站搜索(标题、作者、删除者、时间范围)
5. 自动清理策略(可配置,例如 30 天后物理删除)
6. 排序筛选
- 评论管理(后台)
1. 文章页评论显示(显示评论发布者、评论、发布时间)
2. 文章页评论(用户可以通过前端进行对文章进行评论)
3. 允许用户回复评论(数据库模型自关联)
4. 后台管理评论(增删改查评论)
- 流量数据(后台)
1. 互动展示(文章名称、点赞数、收藏数、访问量、导出 CSV)
2. 审计日志(显示后台操作日志)
### 用例分析
待定
### 技术栈
| 名称 | 版本 | 备注 |
| ---------- | ------ | ---------------------- |
| Python | 3.12.0 | 实现语言 |
| Django | 5.2.8 | Web 框架 |
| Mysql | 8.0.35 | 关系数据库 |
| Ngnix | | 服务器程序(反向代理) |
| Gunicorn | | WSGI 服务器 |
| Supervisor | | 进程守护 |
## 系统架构设计
------
### Django MTV 模型图

### 整体系统架构图(前端 + 后端 + DB)
### 模块设计
| app | 功能 | S/C |
| -------------- | ------------------------------------------------------------ | ---- |
| user_manage | 用户账号管理(创建 / 编辑 / 封禁 / 删除(逻辑删除)/ 查看) 角色与权限管理(角色管理、权限分配、权限提升) | S |
| user_auth | 用户注册(用户名、邮箱、密码、性别、头像、签名) 用户登录(邮箱或用户名登录、记住我) 忘记/重置密码(邮箱找回) | S |
| article_manage | 文章发布(支持标签、分类、草稿) 文章编辑(标题、正文、标签、分类、发布状态) 文章删除(软删除到回收站;支持批量删除) 文章搜索与过滤(标题、标签、分类、作者、全文) 批量操作(批量删除) | S/C |
| blog_display | 首页文章展示(最新 / 热门 / 推荐 / 分类模块) 列表排序(发布日期、点赞量、收藏量、访问量) 文章互动:点赞(幂等 toggle)、收藏(幂等 toggle)、访问量(防刷) 互动 | C |
| category | 列表显示(分类名称、关联文章数、创建者、创建/修改时间) 创建、编辑、删除(不删除文章,仅解除关联或标记) | S |
| tag | 列表显示(标签名称、关联文章数、创建者、创建/修改时间) 创建、编辑、删除(不删除文章,仅解除关联或标记) | S |
| recycle | 展示被删除文章(标题、作者、删除者、删除时间) 还原删除(恢复到原状态或草稿) 彻底删除(物理删除,仅限管理员) 回收站搜索(标题、作者、删除者、时间范围) | S |
| traffic_data | 互动展示(文章名称、点赞数、收藏数、访问量、导出 CSV) | S |
| comment | 允许前端发布评论(用户头像、用户名、评论、发布时间、允许进行回复)后台允许对评论进行(增删改查) | S/C |
## Django(MTV 设计)
------
### 数据库设计(**Models**)
------
#### 用户表(**User**)
| 属性名称 | 字段类型 | 主键/外键 |
| ------------------------ | ----------------- | --------- |
| id | BigAutoField | 主 |
| 用户名(username) | CharField | 唯一 |
| 密码(password) | CharField | |
| 是否激活(is_active) | SmallIntegerField | |
| 是否管理(is_admin) | SmallIntegerField | |
| 创建时间(created_time) | DateTimeField | |
| 更新时间(updated_time) | DateTimeField | |
#### 用户信息表(**UserInfo**)
| 属性 | 字段类型 | 主键/外键 |
| ------------------------ | -------------- | --------- |
| id | BigAutoField | 主键 |
| 用户名(display_name) | CharField | 唯一 |
| 头像(avatar) | ImageField | |
| 邮箱(email) | EmailField | 唯一 |
| 性别(gender) | CharField | |
| 签名(signature) | CharField | |
| 创建时间(created_time) | DateTimeField | |
| 更新时间(updated_time) | DateTimeField | |
| 用户信息(user) | OneToOne(User) | 外键 |
#### 文章表(**Article**)
| 属性 | 字段类型 | 主键/外键 |
| ------------------------ | ---------------------- | --------- |
| id | BigAutoField | 主键 |
| 标题(title) | CharField | 唯一 |
| 内容(content) | TextField | |
| 发布状态(status) | IntegerField | |
| 置顶(is_top) | BooleanField | |
| 封面图片(cover_image) | ImageField | |
| 逻辑删除(deleted) | BooleanField | |
| 路由标签(slug) | SlugField | |
| 创建时间(created_time) | DateTimeField | |
| 更新时间(updated_time) | DateTimeField | |
| 作者(author) | ForeignKey(User) | 外键 |
| 标签(tag) | ManyToManyField(Tag) | 外键 |
| 分类(category) | ForeignKey(Category) | 外键 |
#### 文章互动信息表(**ArticleInteractions**)
| 属性 | 字段类型 | 主键/外键 |
| ------------------------ | --------------------- | --------- |
| id | BigAutoField | 主键 |
| 收藏(star) | PositiveIntegerField | |
| 点赞(likes) | PositiveIntegerField | |
| 访问量(visit) | PositiveIntegerField | |
| 创建时间(created_time) | DateTimeField | |
| 更新时间(updated_time) | DateTimeField | |
| 所属文章(article) | ForeignKey(article) | 外键 |
| 互动用户(user) | ForeignKey(User) | 外键 |
#### 分类表(**Category**)
| 属性 | 字段类型 | 主键/外键 |
| ------------------------ | ------------- | --------- |
| id | BigAutoField | 主键 |
| 分类名称(categoty_name) | CharField | 唯一 |
| 分类描述(description) | CharField | |
| 创建时间(created_time) | DateTimeField | |
| 更新时间(updated_time) | DateTimeField | |
#### 标签表(**Tag**)
| 属性 | 字段类型 | 主键/外键 |
| ------------------------ | ------------- | --------- |
| id | BigAutoField | 主键 |
| 标签名称(tag_name) | CharField | 唯一 |
| 标签描述(description) | CharField | |
| 创建时间(created_time) | DateTimeField | |
| 更新时间(updated_time) | DateTimeField | |
#### 评论表(**Comment**)
| 属性 | 字段类型 | 主键/外键 |
| ------------------------ | --------------------- | --------- |
| id | BigAutoField | 主键 |
| content | TextField | |
| user(关联用户) | ForeignKey(User) | 外键 |
| article(关联文章) | ForeignKey(article) | 外键 |
| parent(父评论) | ForeignKey(comment) | 外键 |
| 创建时间(created_time) | DateTimeField | |
| 更新时间(updated_time) | DateTimeField | |
------
#### E-R 图

### 模板设计(Template)
------
#### 用户管理(user_manage)
##### 用户管理视图设计
| 类名 | 继承 | 描述 |
| ---------------- | ---- | ---------- |
| UserListView | View | 管理页显示 |
| UserCreateView | View | 创建用户 |
| UserUpdateView | View | 更新用户 |
| UserDeleteView | View | 删除用户 |
| UserSearchView | View | 搜索用户 |
| PermissionRevoke | View | 权限分配 |
##### 用户管理路由设计
| 路由名称 | 类 | 描述 |
| -------------------- | ---------------- | -------- |
| /admin/ | UserListView | 后台首页 |
| /admin/user_list/ | UserListView | 用户列表 |
| /admin/user_create/ | UserCreateView | 用户创建 |
| /admin/user_delete/ | UserDeleteView | 用户删除 |
| /admin/user_editing/ | UserUpdateView | 用户更新 |
| /admin/Permission/ | PermissionRevoke | 用户权限 |
------
#### 用户认证(user_auth)
##### 用户认证视图设计
| 类名 | 继承 | 描述 |
| ----------------- | ---- | -------- |
| UserRegisterView | View | 注册功能 |
| UserLoginView | View | 登录功能 |
| PasswordResetView | View | 重置密码 |
##### 用户认证路由设计
| 路由名称 | 类 | 描述 |
| ----------------------------- | ----------------- | -------- |
| /user_auth/login/ | UserLoginView | 用户登录 |
| /user_auth/register/ | UserRegisterView | 用户注册 |
| /user_auth/retrieve_password/ | PasswordResetView | 重置密码 |
------
#### 文章管理(article_manage)
##### 文章管理视图设计
| 类 | 继承 | 备注 |
| ------------------ | ---- | ---------------- |
| ArticleDisplayView | View | 文章管理页面显示 |
| ArticleCreateView | View | 文章创建 |
| ArticleUpdateView | View | 文章更新 |
| ArticleDeleteView | View | 文章删除 |
| ArticleSearchView | View | 文章搜索 |
##### 文章管理路由设计
| 路由名称 | 类 | 描述 |
| ----------------------- | ------------------ | ------------ |
| /admin/article_list/ | ArticleDisplayView | 显示文章列表 |
| /admin/article_create/ | ArticleCreateView | 文章发布 |
| /admin/article_editing/ | ArticleUpdateView | 文章更新 |
| /admin/article_delete/ | ArticleDeleteView | 文章删除 |
| /admin/article_search/ | ArticleSearchView | 文章搜索 |
------
#### 博客首页/文章(blog_display)
##### 博客首页/文章视图设计
| 类 | 继承 | 描述 |
| ---------------------- | ---- | ---------------------------------- |
| IndexDisplayView | View | 显示网站首页 |
| ArticleContentView | View | 显示文章内容页 |
| ArticleInteractionView | View | 文章互动信息(点赞、收藏、访问量) |
| ArticleSortingView | View | 首页文章排序 |
| ArticleCreateView | View | 博客首页发布文章 |
| CommentCreateView | View | 发布评论(文章内容页) |
| CommentUpdateView | View | 更新评论(文章内容页) |
##### 博客首页/文章路由设计
| 路由名称 | 类 | 描述 |
| ------------------------------------------------- | ---------------------- | ------------ |
| /index/ | IndexDisplayView | 博客首页显示 |
| /article/<[int:pk]()>/<[slug:slug]()>/ | ArticleContentView | 文章页显示 |
| /index/article_sort/<[str:str]()>/ | ArticleSortingView | 文章排序 |
| /api/article/<[int:pk]()>/like/ | ArticleInteractionView | 点赞 |
| /api/article/<[int:pk]()>/star/ | ArticleInteractionView | 收藏 |
| /api/article/<[int:pk]()>/visit/ | ArticleInteractionView | 访问 |
| /article/[int:pk]()/[slug:slug]()/comment/ | CommentCreateView | 发布评论 |
| /article/[int:pk]()/[slug:slug]()/comment/update/ | CommentUpdateView | 更新评论 |
------
#### 评论管理(comment)
##### 评论管理视图设计
| 类 | 继承 | 描述 |
| ------------------ | ---- | ------------ |
| CommentDisplayView | View | 显示评论页面 |
| CommentDeleteView | View | 评论删除 |
| CommentSearchView | View | 评论搜索 |
##### 评论管理路由设计
| 路由名称 | 类 | 描述 |
| ---------------------------------------------- | ------------------ | ------------------ |
| /admin/comment_list/ | CommentDisplayView | 后台显示评论 |
| /admin/comment_delete/ | CommentDeleteView | 后台删除评论 |
| /admin/comment_search/ | CommentSearchView | 评论搜索 |
| /article/<[int:pk]()>/<[slug:slug]()>/comment/ | CommentDisplayView | 文章内容页显示评论 |
------
#### 文章分类(category)
##### 文章分类视图设计
| 类 | 继承 | 描述 |
| ------------------- | ---- | ---------------- |
| CategoryDisplayView | View | 显示分类管理页面 |
| CategoryCreateView | View | 创建分类 |
| CategoryUpdateView | View | 更新分类 |
| CategoryDeleteView | View | 删除分类 |
| CategorySearchView | View | 搜索分类 |
##### 文章分类路由设计
| 路由名称 | 类 | 描述 |
| ------------------------------------- | ------------------- | ------------ |
| /admin/display_category/ | CategoryDisplayView | 显示分类列表 |
| /admin/create_category/ | CategoryCreateView | 创建分类 |
| /admin/delete_category/ | CategoryDeleteView | 删除分类 |
| /admin/editing_category/ | CategoryUpdateView | 更新分类 |
| /admin/serach_category/<[str:str]()>/ | CategorySearchView | 搜索分类 |
------
#### 文章标签(tag)
##### 文章标签视图设计
| 类 | 继承 | 描述 |
| -------------- | ---- | ---------------- |
| TagDisplayView | View | 显示标签管理页面 |
| TagCreateView | View | 创建标签 |
| TagUpdateView | View | 更新标签 |
| TagDeleteView | View | 删除标签 |
| TagSearchView | View | 搜索标签 |
##### 文章标签路由设计
| 路由名称 | 类 | 描述 |
| ------------------- | -------------- | -------- |
| /admin/display_tag/ | TagDisplayView | 显示标签 |
| /admin/create_tag/ | TagCreateView | 创建标签 |
| /admin/delete_tag/ | TagDeleteView | 删除标签 |
| /admin/editing_tag/ | TagUpdateView | 更新标签 |
| /admin/search_tag/ | TagSearchView | 搜索标签 |
------
#### 回收站(recycle)
##### 回收站视图设计
| 类 | 继承 | 备注 |
| --------------------- | ---- | ------------------ |
| RecycleDisplayView | View | 显示回收站管理页面 |
| ArticleRestoreView | View | 还原文章 |
| RecycleSearchView | View | 搜索回收站文章 |
| PermanentlyDeleteView | View | 彻底删除文章 |
##### 回收站路由设计
| 路由名称 | 类 | 描述 |
| ----------------------- | --------------------- | ------------ |
| /admin/display_recycle/ | RecycleDisplayView | 显示删除文章 |
| /admin/restore/ | ArticleRestoreView | 恢复文章 |
| /admin/search_recycle/ | RecycleSearchView | 搜索删除文章 |
| /admin/clear_recycle/ | PermanentlyDeleteView | 彻底删除文章 |
------
#### 数据统计(traffic_data)
##### 数据统计视图设计
| 类 | 继承 | 描述 |
| ------------------ | ---- | ------------ |
| TrafficDisplayView | View | 显示统计页面 |
| TrafficSearchView | View | 搜索统计信息 |
| TrafficExportView | View | 导出统计信息 |
##### 数据统计路由设计
| 路由名称 | 类 | 描述 |
| ----------------------- | ------------------ | ------------ |
| /admin/display_traffic/ | TrafficDisplayView | 显示数据统计 |
| /admin/search_traffic/ | TrafficSearchView | 搜索数据统计 |
| /admin/export_traffic/ | TrafficExportView | 导出数据统计 |
## 如何使用我发送给你们的项目
1. 下载项目压缩包到本地
2. 对压缩包进行解压
3. 解压后的文件直接拖入Pycharm
4. 找到pycharm左下角的终端,点击

5. 终端中输入命令
```shell
.\venv\Scripts\activate
```
6. 终端显示下图venv表示成功进入虚拟环境

7. 首先进入config包中的settings.py文件

8. 找到数据库配置信息进行修改成你自己的

9. 执行下面命令进行数据库迁移
```shell
python .\manage.py makemigrations
python .\manage.py migrate
```
完成上面步骤就可以进行开发了,不懂先问AI。还是不懂再来找我!