关于这个项目
从命令行工具到网页应用,同一份数据,两种使用方式。
项目说明
第 4—7 章完成了命令行版“个人知识库助手”,实现了卡片的增删改查、分类与关键词统计,以及四张统计图表。本章在此基础上增加 FastAPI 接口和四个网页页面,把原有能力搬到浏览器中。命令行版与网页版共用 data/cards.json,数据只保存一份,两边看到的始终是同一批卡片。
项目结构
| 文件 / 目录 | 职责 | 来源 |
|---|---|---|
| web_app.py | FastAPI 应用:11 个接口、四个页面路由、静态与图表挂载 | 本章新增 |
| card_service.py | 卡片读写与增删改查,生成编号和时间戳 | 第 8 章从命令行逻辑抽出的服务层 |
| stats_service.py | 概览、分类、趋势、高频词统计与图表文件清单 | 第 8 章从命令行逻辑抽出的服务层 |
| main.py | 第 4—7 章的命令行入口,现复用两个服务层 | 第 7 章,仅做最小导入适配 |
| data/cards.json | 卡片数据,命令行版与网页版共用 | 第 6 章 |
| charts/ | 第七章生成的四张 PNG 图表 | 第 7 章 |
| docs/api_contract.md | 统一响应信封、11 个接口与 data 形状约定 | 本章新增 |
| docs/ui_contract.md | 配色、字体、页面结构、固定 id 与类名约定 | 本章新增 |
| requirements.txt | Python 依赖清单,含 FastAPI 与 Uvicorn | 第 7 章,本章补充 |
| chapter_versions/ | 第 4—7 章源码存档,逐章可回溯 | 历史归档 |
| static/index.html | 首页:项目概览、功能入口、分类分布 | 本章新增 |
| static/home.js | 首页脚本:概览与分类分布数据渲染 | 本章新增 |
| static/cards.html | 卡片管理页:工具栏、卡片列表、编辑弹窗 | 本章新增 |
| static/app.js | 卡片管理脚本:搜索、筛选、新增、修改、删除 | 本章新增 |
| static/charts.html | 统计图表页:图表与三组统计表 | 本章新增 |
| static/charts.js | 图表页脚本:图表、分类、趋势、高频词渲染 | 本章新增 |
| static/about.html | 关于页:项目说明、结构、接口清单与运行方式 | 本章新增 |
| static/style.css | 全站唯一样式表,四个页面共用 | 本章新增 |
接口清单
| 方法 | 路径 |
|---|---|
| GET | /api/cards |
| POST | /api/cards |
| PUT | /api/cards/{id} |
| DELETE | /api/cards/{id} |
| GET | /api/cards/meta |
| GET | /api/stats/summary |
| GET | /api/stats/category |
| GET | /api/stats/trend |
| GET | /api/stats/keywords |
| GET | /api/stats/charts |
| GET | /api/charts/{name} |
所有接口统一返回 {"ok": true/false, "data": ..., "message": "中文提示"},失败时 message 为中文。
运行方式
- 安装依赖:
pip install -r requirements.txt - 启动服务:
python -m uvicorn web_app:app --host 127.0.0.1 --port 8000 - 访问地址:http://127.0.0.1:8000