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 作为后端引擎:

工作流程

  1. 关键词提取:将用户输入按标点符号和空格分词,提取长度 ≥ 2 的关键词
  2. 内容检索:遍历数据库中所有书籍内容,按关键词匹配度评分排序
  3. 上下文构建:选取高匹配度段落,拼接为不超过 4000 字符的上下文
  4. 历史维护:每个用户维护最近 6 轮对话历史
  5. 工作流调用:将用户消息、快捷操作、书籍列表、对话历史一并发送至 Dify API
  6. 响应解析:从 Dify 返回的 workflow outputs 中提取 AI 回复

配置项

DIFY_API_URL=http://localhost/v1
DIFY_API_KEY=app-4zrWRZ4fnv74ku9Fb6jpImtW
DIFY_INPUT_VAR=input

九、项目特色

  1. 三层架构:Controller / Service / CRUD 分层清晰,便于维护和扩展
  2. 自动初始化:启动时自动创建数据库表、导入小说文件、创建默认管理员
  3. 智能分类:根据 TXT 文件头部的"分类"字段自动映射到平台分类体系
  4. AI 增强:集成 Dify 工作流,实现基于平台内容的智能推荐与对话
  5. 爬虫配套:提供起点中文网爬虫脚本,方便批量获取小说资源
  6. 端口自适应:启动时自动检测并释放占用端口(8080 → 3000 → 5000 → 9000)
  7. 缓存控制:全局中间件禁用浏览器缓存,确保内容实时更新
  8. 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 智能对话功能,为用户提供个性化的小说推荐服务。配套的爬虫脚本进一步丰富了内容来源。整体而言,该项目具备良好的可扩展性和实用性,可作为在线阅读平台的坚实基础。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐