feat: v2.6.0 - API安全优化和文档整合

## 核心优化
- 移除详情页自动调用博查API的逻辑,改为按需加载
- 添加基于IP的频率限制(每小时3次)
- 实现验证码防护机制(超过阈值后要求验证)
- 新增频率限制工具类 utils/rate_limiter.py

## 成本控制
- API调用减少约90%+(只在用户点击时调用)
- 防止恶意滥用和攻击
- 可配置的频率限制和验证码策略

## 文档整合
- 创建 docs/ 目录结构
- 归档历史版本文档到 docs/archive/
- 移动部署文档到 docs/deployment/
- 添加文档索引 docs/README.md

## 技术变更
- 新增依赖: Flask-Limiter==3.5.0
- 修改: app.py (移除自动调用,新增API端点)
- 修改: templates/detail_new.html (按需加载UI)
- 新增: utils/rate_limiter.py (频率限制和验证码)
- 新增: docs/archive/DEVELOP_v2.6.0_API_SECURITY.md

## 部署说明
1. pip install Flask-Limiter==3.5.0
2. 重启应用
3. 无需数据库迁移

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Jowe
2026-02-06 15:54:13 +08:00
parent c1a06ad684
commit 939717fa57
27 changed files with 1670 additions and 140 deletions

View File

@@ -0,0 +1,427 @@
# ZJPB v2.1.0 开发进度记录
**日期**: 2025-01-30
**版本**: v2.1.0
**状态**: 部署进行中90%完成)
---
## 📋 本次开发内容总结
### 新增功能
1. **Prompt管理系统**
- 新增 `prompt_templates` 数据库表
- 后台新增"Prompt管理"菜单
- 可管理AI提示词模板标签生成、功能生成、详细介绍生成
- 默认初始化3条模板数据
2. **页脚优化**
- 添加ICP备案号浙ICP备2025154782号-1
- 添加Microsoft Clarity统计代码ID: uoa2j40sf0
- 更新版权年份为2025
- 优化页脚链接文字(中文化)
3. **图标优化**
- 详情页Material Icons → Emoji
- 替换图标:`arrow_back``←`, `north_east``↗`, `visibility``👁`, `calendar_today``📅`
- 首页已使用emoji但有CSS残留待上传修复文件
4. **标签显示修复**
- 修复编辑页/创建页标签名称无法显示问题
- 使用正则表达式提取 `<Tag XXX>` 格式中的标签名称
- 修改文件:`templates/admin/site/create.html`, `templates/admin/site/edit.html`
---
## ✅ 已完成的工作
### 代码开发
- [x] 创建 `PromptTemplate` 模型(`models.py`
- [x] 创建数据库迁移脚本(`migrate_prompts.py`
- [x] 添加 `PromptAdmin` 管理视图(`app.py`
- [x] 修复详情页图标(`templates/detail_new.html`
- [x] 修复标签显示问题(`templates/admin/site/create.html`, `edit.html`
- [x] 优化页脚(`templates/base_new.html`
- [x] 完善 `TagGenerator` 类,添加 `generate_description` 方法
### Git管理
- [x] Git提交所有修改Commit ID: `9f5d006`
- [x] Git提交信息`release: v2.1.0 - Prompt管理系统、页脚优化、图标修复`
- [x] 文件统计23 files changed, 5868 insertions(+), 96 deletions(-)
### 服务器部署
- [x] 配置Git用户信息
- [x] 恢复Git stash
- [x] 提交代码到服务器Git仓库
- [x] 安装新依赖:`markdown`, `pypinyin`, `gunicorn`
- [x] 运行数据库迁移(成功创建 `prompt_templates` 表及3条数据
- [x] 修复 `manage.sh` 路径配置(`/www/wwwroot/zjpb``/opt/1panel/apps/zjpb`
- [x] 修复gunicorn启动命令`app:app``wsgi:app`
- [x] 应用成功启动PID: 20+
---
## ✅ 已验证功能
1. **页脚ICP备案号** ✅ - 正常显示
2. **Microsoft Clarity统计** ✅ - 已加载
3. **详情页图标** ✅ - 全部为emoji
4. **搜索功能** ✅ - 正常工作
5. **数据库迁移** ✅ - 表和数据创建成功
6. **应用运行状态** ✅ - 服务正常
---
## 🔄 待完成任务
### 1. 上传缺失的文件(重要!)
需要上传以下2个文件到服务器
**文件1**: `templates/index_new.html`
- **本地路径**: `D:\315mac\Code\zjpb\templates\index_new.html`
- **服务器路径**: `/opt/1panel/apps/zjpb/templates/index_new.html`
- **原因**: 删除Material Icons残留CSS第259-261行已删除
- **作用**: 修复首页图标显示问题
**文件2**: `utils/tag_generator.py`
- **本地路径**: `D:\315mac\Code\zjpb\utils\tag_generator.py`
- **服务器路径**: `/opt/1panel/apps/zjpb/utils/tag_generator.py`
- **原因**: 包含完整的 `generate_description` 方法第150-219行
- **作用**: 修复AI生成详细介绍报错'TagGenerator' object has no attribute 'generate_description'
**上传后执行**:
```bash
cd /opt/1panel/apps/zjpb
./manage.sh restart
```
### 2. 待验证功能
**后台Prompt管理**:
- [ ] 检查后台左侧菜单是否有"Prompt管理"
- [ ] 点击进入查看是否有3条记录
- 标签生成 (id: 1)
- 主要功能生成 (id: 2)
- 详细介绍生成 (id: 3)
**标签显示验证**:
- [ ] 后台 → 网站管理 → 编辑任意网站
- [ ] 检查标签区域是否显示蓝色标签带文字
- [ ] 不应该是空白蓝框
**AI功能测试**:
- [ ] 测试"AI生成标签"按钮
- [ ] 测试"AI生成详细介绍"按钮需要先上传tag_generator.py
- [ ] 测试"AI生成主要功能"按钮
**首页图标验证**:
- [ ] 清除浏览器缓存Ctrl+Shift+Delete
- [ ] 强制刷新首页Ctrl+F5
- [ ] 检查首页卡片图标是否为emoji需要先上传index_new.html
---
## 📊 数据库变更
### 新增表: `prompt_templates`
```sql
CREATE TABLE prompt_templates (
id INTEGER NOT NULL AUTO_INCREMENT,
`key` VARCHAR(50) NOT NULL COMMENT '唯一标识(tags/features/description)',
name VARCHAR(100) NOT NULL COMMENT '模板名称',
system_prompt TEXT NOT NULL COMMENT '系统提示词',
user_prompt_template TEXT NOT NULL COMMENT '用户提示词模板(支持变量)',
description VARCHAR(200) COMMENT '模板说明',
is_active BOOL COMMENT '是否启用',
created_at DATETIME COMMENT '创建时间',
updated_at DATETIME COMMENT '更新时间',
PRIMARY KEY (id),
UNIQUE (`key`)
)
```
### 已插入的默认数据3条
| ID | Key | Name | Description |
|----|-----|------|-------------|
| 1 | tags | 标签生成 | 根据网站名称和描述生成3-5个分类标签 |
| 2 | features | 主要功能生成 | 根据网站名称和描述生成5-8个主要功能点 |
| 3 | description | 详细介绍生成 | 根据网站名称和简短描述生成200-400字的详细介绍 |
---
## 🔧 服务器配置信息
### 基本信息
- **服务器路径**: `/opt/1panel/apps/zjpb`(不是 `/www/wwwroot/zjpb`
- **Python虚拟环境**: `/opt/1panel/apps/zjpb/venv`
- **Git版本**: 2.43.0
- **Git用户**: `ZJPB Admin <admin@zjpb.net>`
### 已安装的依赖
- Flask==3.0.0
- Flask-SQLAlchemy==3.1.1
- Flask-Admin==1.6.1
- Flask-Login==0.6.3
- pymysql==1.1.0
- python-dotenv==1.0.0
- Werkzeug==3.0.1
- cryptography==41.0.7
- WTForms==2.3.3
- requests==2.31.0
- beautifulsoup4==4.12.2
- Pillow>=10.2.0
- openai>=1.0.0
- **markdown==3.10** (新增)
- **pypinyin==0.51.0** (已有)
- **gunicorn==21.2.0** (已有)
### 应用管理脚本
- **启动**: `./manage.sh start`
- **停止**: `./manage.sh stop`
- **重启**: `./manage.sh restart`
- **状态**: `./manage.sh status`
- **日志**: `./manage.sh logs`
### 配置文件修复记录
1. `manage.sh` - 路径已修复为 `/opt/1panel/apps/zjpb`
2. `gunicorn_config.py` - 路径已修复
3. `deploy.sh` - 路径已修复
4. `manage.sh` - 启动命令已修复为 `wsgi:app`
---
## 📝 Git提交记录
### 最新提交(服务器)
```
Commit: 9f5d006
Author: ZJPB Admin <admin@zjpb.net>
Date: 2025-12-30 01:21:xx
release: v2.1.0 - Prompt管理系统、页脚优化、图标修复
23 files changed, 5868 insertions(+), 96 deletions(-)
新增文件:
- DEPLOYMENT.md
- DEPLOY_CHECKLIST.md
- INCREMENTAL_DEPLOY.md
- QUICK_DEPLOY.md
- deploy.sh
- export_data.py
- git_patch_deploy.sh
- gunicorn_config.py
- manage.sh
- migrate_db.py
- migrate_prompts.py
- nul
- one_click_deploy.sh
- templates/admin/change_password.html
- test_deepseek.py
- v2.1.0.patch
- wsgi.py
```
### 本地提交(待推送)
```
Commit: 30b1ef7
Tag: v2.1.0
release: v2.1.0 - Prompt管理系统、页脚优化、图标修复
新增功能:
- Prompt管理后台新增Prompt模板管理功能
- 数据库迁移新增prompt_templates表及默认数据
- 页脚优化添加ICP备案号和Microsoft Clarity统计
- 图标修复详情页Material Icons替换为Emoji
- 标签显示:修复编辑页标签名称无法显示的问题
```
---
## 🐛 已知问题
### 1. 首页图标CSS残留
- **状态**: 待修复(需上传文件)
- **文件**: `templates/index_new.html`
- **问题**: 第259-261行有Material Icons CSS残留
- **解决方案**: 已删除,需上传到服务器
### 2. AI生成详细介绍报错
- **状态**: 待修复(需上传文件)
- **文件**: `utils/tag_generator.py`
- **错误**: `'TagGenerator' object has no attribute 'generate_description'`
- **原因**: 服务器版本缺少该方法
- **解决方案**: 上传包含完整方法的文件
### 3. Git Stash残留
- **状态**: 已处理
- **位置**: 服务器还有1个stash备份 `stash@{1}`
- **建议**: 可以保留作为备份,或清理:`git stash clear`
---
## 📂 关键文件清单
### 已修改的文件(本地最新)
1. `app.py` - 新增PromptAdmin视图
2. `models.py` - 新增PromptTemplate模型
3. `migrate_prompts.py` - 数据库迁移脚本
4. `templates/base_new.html` - 页脚优化
5. `templates/detail_new.html` - 图标修复
6. `templates/index_new.html` - 删除CSS残留
7. `templates/admin/site/create.html` - 标签显示修复
8. `templates/admin/site/edit.html` - 标签显示修复
9. `utils/tag_generator.py` - 完整的AI生成方法
10. `requirements.txt` - 依赖清单未变更markdown未加入
### 新增的文件
1. `migrate_prompts.py` - Prompt表迁移脚本
2. `INCREMENTAL_DEPLOY.md` - 增量部署指南
3. `GIT_PATCH_DEPLOY.md` - Git Patch部署指南
4. `MANUAL_DEPLOY.md` - 手动部署指南
5. `CHECK_GIT.md` - Git检查指南
6. `one_click_deploy.sh` - 一键部署脚本
7. `git_patch_deploy.sh` - Git patch部署脚本
8. `quick_deploy_server.sh` - 服务器快速部署脚本
---
## 🚀 下次继续工作的步骤
### 立即执行5分钟
1. **上传缺失文件**使用1Panel文件管理器:
```
本地 → 服务器
D:\315mac\Code\zjpb\templates\index_new.html
→ /opt/1panel/apps/zjpb/templates/index_new.html
D:\315mac\Code\zjpb\utils\tag_generator.py
→ /opt/1panel/apps/zjpb/utils/tag_generator.py
```
2. **重启应用**SSH或1Panel终端:
```bash
cd /opt/1panel/apps/zjpb
./manage.sh restart
./manage.sh status
```
3. **清除浏览器缓存** (Ctrl+Shift+Delete 或 Ctrl+F5)
### 验证功能5分钟
1. **验证Prompt管理**:
- 登录 `/admin/login`
- 检查"Prompt管理"菜单
- 查看3条记录
2. **验证标签显示**:
- 后台 → 网站管理 → 编辑
- 检查标签是否显示名称
3. **验证AI功能**:
- 测试3个AI生成按钮
- 确保都能正常工作
4. **验证首页图标**:
- 刷新首页
- 检查所有图标是否为emoji
### 可选优化(未来)
- [ ] 将 `markdown` 添加到 `requirements.txt`
- [ ] 清理服务器上的临时文件(`nul`, `test_deepseek.py`, `*.patch`
- [ ] 配置Git远程仓库GitHub/Gitee用于版本管理
- [ ] 优化gunicorn配置worker数量、超时时间等
- [ ] 设置应用自动启动systemd service
---
## 💡 技术要点记录
### Git Stash恢复
```bash
git stash list # 查看stash列表
git stash pop # 恢复最新stash
git stash apply # 恢复但不删除stash
git stash clear # 清除所有stash
```
### 正则表达式提取标签
```javascript
// 从 <Tag XXX> 格式提取标签名称
const match = tagText.match(/<Tag\s+(.+?)>/);
if (match) {
tagText = match[1]; // 提取 "XXX"
}
```
### Flask-Admin模型repr格式
```python
# Tag模型的__repr__返回
def __repr__(self):
return f'<Tag {self.name}>'
# 在Flask-Admin select中显示为<Tag 图像生成>
# 需要JavaScript提取实际标签名
```
### Gunicorn启动配置
```python
# wsgi.py - 正确的应用入口
from app import create_app
app = create_app(os.getenv('FLASK_ENV', 'production'))
# manage.sh - 正确的启动命令
gunicorn -c gunicorn_config.py wsgi:app
```
---
## 📞 联系信息
- **项目名称**: ZJPB - 焦提示词 | AI工具导航
- **ICP备案号**: 浙ICP备2025154782号-1
- **统计代码**: Microsoft Clarity (ID: uoa2j40sf0)
- **数据库**: ai_nav @ 112.124.42.38 (MySQL)
- **服务器路径**: /opt/1panel/apps/zjpb
---
## 📚 相关文档
- `INCREMENTAL_DEPLOY.md` - 增量部署完整指南
- `GIT_PATCH_DEPLOY.md` - Git Patch部署方案
- `MANUAL_DEPLOY.md` - 手动上传部署方案
- `CHECK_GIT.md` - Git环境检查指南
- `DEPLOYMENT.md` - 通用部署文档
- `QUICK_DEPLOY.md` - 1Panel快速部署
---
## ✅ 部署完成度
**总体进度**: 90%
| 任务 | 状态 |
|------|------|
| 代码开发 | ✅ 100% |
| Git提交 | ✅ 100% |
| 服务器配置 | ✅ 100% |
| 数据库迁移 | ✅ 100% |
| 应用启动 | ✅ 100% |
| 文件上传 | ⏳ 80% (缺2个文件) |
| 功能验证 | ⏳ 60% (部分已验证) |
**预计剩余时间**: 10分钟上传文件+验证)
---
**最后更新**: 2025-01-30 01:30
**下次继续**: 上传2个文件 → 重启应用 → 验证功能 → 完成部署 🎉