微光闪烁中...

文章背景图

项目立项与需求分析

六月栀子坠星茫 六月栀子坠星茫
|
2025-12-10
|
50
|
-
|
- min
|
1
|

# 项目立项与需求分析

## 项目简介

- 项目名称: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 模型图

![20200108163057172](C:\Users\16193\Downloads\20200108163057172.png)

### 整体系统架构图(前端 + 后端 + 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 图

![image-20251124083215277](C:\Users\16193\AppData\Roaming\Typora\typora-user-images\image-20251124083215277.png)

### 模板设计(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左下角的终端,点击

![image-20251126152810513](C:\Users\16193\AppData\Roaming\Typora\typora-user-images\image-20251126152810513.png)

5. 终端中输入命令

```shell

.\venv\Scripts\activate

```

6. 终端显示下图venv表示成功进入虚拟环境

![image-20251126152638450](C:\Users\16193\AppData\Roaming\Typora\typora-user-images\image-20251126152638450.png)

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

![image-20251126153510691](C:\Users\16193\AppData\Roaming\Typora\typora-user-images\image-20251126153510691.png)

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

![image-20251126153756181](C:\Users\16193\AppData\Roaming\Typora\typora-user-images\image-20251126153756181.png)

9. 执行下面命令进行数据库迁移

```shell

python .\manage.py makemigrations

python .\manage.py migrate

```

完成上面步骤就可以进行开发了,不懂先问AI。还是不懂再来找我!

分享文章

未配置分享平台

请在主题设置中启用分享平台

评论

文章目录