悦读网项目总结
·
FastAPI 在线阅读与创作平台 — 项目总结文档
一、项目概述
本项目是一个基于 FastAPI 框架开发的在线阅读与创作平台,提供小说浏览、书架管理、创作者入驻、作品发布以及 AI 智能对话等核心功能。项目采用 Python 3.12 运行环境,使用 SQLite 作为轻量级数据库,并集成了 Dify AI 工作流实现智能推荐与对话能力。
二、技术栈
| 类别 | 技术 |
|---|---|
| 后端框架 | FastAPI + Uvicorn |
| 数据库 | SQLite(本地文件 users.db) |
| 数据验证 | Pydantic(Schemas 模型) |
| HTTP 客户端 | httpx(异步请求) |
| AI 集成 | Dify Workflow API |
| 爬虫工具 | requests + BeautifulSoup4 |
| 前端页面 | 原生 HTML 静态页面 |
| 配置管理 | python-dotenv(.env 文件) |
三、项目架构
项目采用 Controller — Service — CRUD 三层架构,职责清晰、分层明确:
main.py # 应用入口、路由注册、静态文件服务
├── app/
│ ├── config.py # 环境变量与 Dify API 配置
│ ├── controller/ # 控制器层:接收请求、调用服务、返回响应
│ │ ├── auth_controller.py # 认证(登录/注册/改密/删除用户)
│ │ ├── book_controller.py # 书籍管理(增删查、TXT 文件读取)
│ │ ├── bookshelf_controller.py # 书架管理(添加/删除/查看/检查)
│ │ ├── creator_controller.py # 创作者管理(入驻/退出/检查)
│ │ ├── work_controller.py # 作品管理(发布/删除/列表)
│ │ └── ai_controller.py # AI 对话接口
│ ├── service/ # 服务层:业务逻辑处理
│ │ ├── auth_service.py
│ │ ├── book_service.py
│ │ ├── bookshelf_service.py
│ │ ├── creator_service.py
│ │ ├── work_service.py
│ │ └── ai_service.py
│ ├── crud/ # 数据访问层:数据库操作
│ │ ├── database.py # 数据库初始化与表结构定义
│ │ ├── user_crud.py
│ │ ├── book_crud.py
│ │ ├── bookshelf_crud.py
│ │ ├── creator_crud.py
│ │ └── work_crud.py
│ └── model/
│ └── schemas.py # Pydantic 数据模型定义
├── novels/ # TXT 小说文件目录
├── libs/ # 本地依赖库
├── qidian_spider.py # 起点中文网爬虫脚本
├── .env # 环境变量配置
└── 启动API.bat # Windows 启动脚本
四、核心功能模块
4.1 用户认证模块
- 登录:验证用户名和密码,返回登录状态
- 注册:新用户注册,校验用户名唯一性
- 修改密码:验证旧密码后更新新密码
- 删除用户:管理员可删除指定用户
- 默认管理员:初始化时自动创建
admin / admin123账户
4.2 书籍管理模块
- 书籍列表:获取数据库中所有书籍信息
- 书籍详情:根据 ID 或名称查询书籍
- 添加书籍:支持书名、作者、内容、分类字段
- 删除书籍:根据 ID 删除指定书籍
- TXT 导入:自动扫描
novels/目录下的.txt文件并导入数据库 - 分类映射:自动识别小说分类(玄幻、都市、仙侠、科幻等 15+ 类别)
4.3 书架管理模块
- 加入书架:用户收藏书籍到个人书架
- 移出书架:从书架中移除书籍
- 书架列表:查看已收藏的所有书籍
- 收藏检查:检查某本书是否已在书架中
4.4 创作者模块
- 创作者入驻:用户申请成为创作者,设置笔名
- 创作者退出:创作者退出平台
- 身份检查:检查用户是否已注册为创作者
4.5 作品管理模块
- 发布作品:创作者发布新作品(关联笔名与用户名)
- 删除作品:删除已发布的作品
- 作品列表:查看指定用户的所有作品
4.6 AI 智能对话模块
- 智能推荐:基于 Dify Workflow 实现小说推荐
- 上下文感知:维护用户对话历史(最多 6 轮)
- 内容检索:关键词匹配数据库中的小说内容,构建上下文(最多 4000 字符)
- 快捷操作:支持
quick_action参数切换对话场景 - 书籍列表注入:自动将平台书籍列表传递给 AI 工作流
4.7 起点中文网爬虫
- 书籍信息抓取:书名、作者、简介
- 章节列表获取:自动解析目录页,提取所有章节链接
- 章节内容下载:逐章下载并保存为 TXT 文件
- VIP 章节识别:自动标记 VIP 章节,跳过下载
- 反爬处理:携带 Cookie 和 User-Agent,设置请求延迟
五、数据库设计
项目使用 SQLite 数据库,共包含 5 张核心表:
5.1 users(用户表)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INTEGER | 主键,自增 |
| user_name | TEXT | 用户名,唯一 |
| user_pass | TEXT | 密码 |
| user_email | TEXT | 邮箱 |
| user_data | TEXT | 注册时间 |
5.2 bookshelf(书架表)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INTEGER | 主键,自增 |
| book_name | TEXT | 书籍名称 |
| data_time | TEXT | 添加时间 |
5.3 books(书籍表)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INTEGER | 主键,自增 |
| book_name | TEXT | 书名 |
| book_author | TEXT | 作者 |
| book_content | TEXT | 书籍全文内容 |
| category | TEXT | 分类(默认 ‘all’) |
| data_time | TEXT | 添加时间 |
5.4 creators(创作者表)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INTEGER | 主键,自增 |
| user_name | TEXT | 用户名 |
| pen_name | TEXT | 笔名 |
| join_time | TEXT | 入驻时间 |
5.5 works(作品表)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INTEGER | 主键,自增 |
| work_name | TEXT | 作品名称 |
| pen_name | TEXT | 笔名 |
| user_name | TEXT | 用户名 |
| publish_time | TEXT | 发布时间 |
六、API 接口一览
| 模块 | 方法 | 路径 | 功能 |
|---|---|---|---|
| 认证 | POST | /get_login1 |
用户登录 |
| 认证 | POST | /register |
用户注册 |
| 认证 | POST | /delete_user |
删除用户 |
| 认证 | POST | /change_password |
修改密码 |
| 书架 | POST | /bookshelf/add |
加入书架 |
| 书架 | POST | /bookshelf/delete |
移出书架 |
| 书架 | GET | /bookshelf/list |
书架列表 |
| 书架 | GET | /bookshelf/check/{book_name} |
检查收藏状态 |
| 书籍 | GET | /book/list |
书籍列表 |
| 书籍 | GET | /book/novels |
TXT 文件列表 |
| 书籍 | GET | /book/novels/{title} |
获取 TXT 内容 |
| 书籍 | GET | /book/detail/{book_id} |
书籍详情 |
| 书籍 | GET | /book/by_name/{book_name} |
按名称查询 |
| 书籍 | POST | /book/add |
添加书籍 |
| 书籍 | POST | /book/delete/{book_id} |
删除书籍 |
| 创作者 | GET | /creator/check/{user_name} |
检查创作者身份 |
| 创作者 | POST | /creator/join |
入驻创作者 |
| 创作者 | POST | /creator/exit |
退出创作者 |
| 作品 | GET | /work/list/{user_name} |
用户作品列表 |
| 作品 | POST | /work/add |
发布作品 |
| 作品 | POST | /work/delete/{work_id} |
删除作品 |
| AI | POST | /ai/chat |
AI 智能对话 |
七、前端页面
项目提供 7 个静态 HTML 页面:
| 页面 | 路径 | 功能 |
|---|---|---|
| 首页 | / |
阅读网站首页 |
| 阅读页 | /阅读页面.html |
小说内容阅读 |
| 登录页 | /登录.html |
用户登录 |
| 注册页 | /注册.html |
用户注册 |
| 创作中心 | /创作中心.html |
创作者管理面板 |
| 创作编辑 | /创作编辑.html |
作品编辑发布 |
八、AI 对话系统设计
AI 模块是项目的亮点之一,采用 Dify Workflow 作为后端引擎:
工作流程
- 关键词提取:将用户输入按标点符号和空格分词,提取长度 ≥ 2 的关键词
- 内容检索:遍历数据库中所有书籍内容,按关键词匹配度评分排序
- 上下文构建:选取高匹配度段落,拼接为不超过 4000 字符的上下文
- 历史维护:每个用户维护最近 6 轮对话历史
- 工作流调用:将用户消息、快捷操作、书籍列表、对话历史一并发送至 Dify API
- 响应解析:从 Dify 返回的 workflow outputs 中提取 AI 回复
配置项
DIFY_API_URL=http://localhost/v1
DIFY_API_KEY=app-4zrWRZ4fnv74ku9Fb6jpImtW
DIFY_INPUT_VAR=input
九、项目特色
- 三层架构:Controller / Service / CRUD 分层清晰,便于维护和扩展
- 自动初始化:启动时自动创建数据库表、导入小说文件、创建默认管理员
- 智能分类:根据 TXT 文件头部的"分类"字段自动映射到平台分类体系
- AI 增强:集成 Dify 工作流,实现基于平台内容的智能推荐与对话
- 爬虫配套:提供起点中文网爬虫脚本,方便批量获取小说资源
- 端口自适应:启动时自动检测并释放占用端口(8080 → 3000 → 5000 → 9000)
- 缓存控制:全局中间件禁用浏览器缓存,确保内容实时更新
- CORS 支持:允许跨域请求,便于前后端分离部署
十、运行方式
环境要求
- Python 3.12+
- 依赖库已内置在
libs/目录下
启动方式
方式一:批处理脚本
启动API.bat
方式二:手动启动
python main.py
服务启动后会自动打印访问地址,例如:http://127.0.0.1:8080
十一、项目文件统计
| 类型 | 数量 |
|---|---|
| 控制器(Controller) | 6 个 |
| 服务(Service) | 6 个 |
| 数据访问(CRUD) | 6 个 |
| 数据模型(Schema) | 10 个 |
| 数据库表 | 5 张 |
| API 接口 | 22 个 |
| 前端页面 | 7 个 |
| 示例小说 | 40+ 部 |
十二、总结
本项目是一个功能完整的在线阅读与创作平台,涵盖了从用户注册登录、书籍浏览收藏、创作者入驻到作品发布的全流程。项目架构清晰、模块划分合理,并创新性地引入了 AI 智能对话功能,为用户提供个性化的小说推荐服务。配套的爬虫脚本进一步丰富了内容来源。整体而言,该项目具备良好的可扩展性和实用性,可作为在线阅读平台的坚实基础。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)