修复内容: 1. Collection 模型唯一约束逻辑错误 - 修改约束从 (user_id, site_id, folder_id) 到 (user_id, site_id) - 防止用户多次收藏同一网站 2. 用户注册重复提交数据库 - 优化为只提交一次数据库操作 - 提升注册性能 3. JavaScript 未使用的变量 - 删除 updateCollectButton() 中未使用的 icon 变量 4. 文件夹计数逻辑缺失 - 为每个文件夹添加收藏数量计算 - 修复收藏列表页面显示 5. JavaScript 错误处理不完善 - 所有 fetch 调用添加 HTTP 状态码检查 - 改进网络错误提示 新增文件: - fix_collection_constraint.py - 数据库约束修复脚本 - BUGFIX_v3.0.1.md - 详细修复记录 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
3.8 KiB
3.8 KiB
v3.0 代码修复记录
修复日期: 2025-02-06 修复版本: v3.0.1
修复的问题
1. Collection 模型唯一约束逻辑错误 ✅
问题描述:
- 原约束:
(user_id, site_id, folder_id) - 由于
folder_id可为 NULL,导致用户可以多次收藏同一网站到"未分类"
修复方案:
- 新约束:
(user_id, site_id) - 确保每个用户只能收藏一次同一个网站
修改文件:
models.py(第 262-265 行)
数据库迁移:
- 新增
fix_collection_constraint.py脚本用于修复现有数据库
2. 用户注册重复提交数据库 ✅
问题描述:
- 注册时先提交用户数据,登录后再次提交
last_login - 造成不必要的数据库操作
修复方案:
- 在第一次提交前设置
last_login - 只提交一次数据库
修改文件:
app.py(第 643-651 行)
修复前:
user = User(username=username)
user.set_password(password)
db.session.add(user)
db.session.commit() # 第一次
login_user(user)
user.last_login = datetime.now()
db.session.commit() # 第二次
修复后:
user = User(username=username)
user.set_password(password)
user.last_login = datetime.now()
db.session.add(user)
db.session.commit() # 只提交一次
login_user(user)
3. JavaScript 未使用的变量 ✅
问题描述:
updateCollectButton()函数中获取了icon元素但未使用
修复方案:
- 删除未使用的变量声明
修改文件:
templates/detail_new.html(第 1599-1611 行)
4. 文件夹计数逻辑缺失 ✅
问题描述:
- 模板中使用
folder.count但后端未计算 - 导致文件夹标签显示的数量不正确
修复方案:
- 在
user_collections()路由中为每个文件夹计算收藏数量
修改文件:
app.py(第 1141-1144 行)
新增代码:
# 为每个文件夹添加收藏计数
for folder in folders:
folder.count = Collection.query.filter_by(
user_id=current_user.id,
folder_id=folder.id
).count()
5. JavaScript 错误处理不完善 ✅
问题描述:
- Fetch API 未检查 HTTP 状态码
- 如果服务器返回 500 错误,
.json()可能失败但不会被捕获
修复方案:
- 在所有 fetch 调用中添加状态码检查
修改文件:
templates/detail_new.html(第 1579-1662 行)
修复模式:
fetch('/api/...')
.then(r => {
if (!r.ok) throw new Error(`HTTP ${r.status}`);
return r.json();
})
.then(data => { ... })
.catch(err => { ... });
修改的文件清单
- models.py - 修复 Collection 唯一约束
- app.py - 修复注册重复提交 + 添加文件夹计数
- templates/detail_new.html - 删除未使用变量 + 改进错误处理
- fix_collection_constraint.py (新增) - 数据库约束修复脚本
部署说明
对于新部署(未运行过 create_user_tables.py)
直接运行:
python create_user_tables.py
新的约束会自动生效。
对于已部署的环境(已有数据)
需要运行修复脚本:
python fix_collection_constraint.py
注意: 如果数据库中已存在重复收藏(同一用户多次收藏同一网站),修复脚本会失败。需要先清理重复数据。
测试建议
修复后请测试:
- 收藏功能 - 尝试多次收藏同一网站,应该提示"已收藏"
- 文件夹计数 - 访问收藏列表,文件夹标签应显示正确的数量
- 错误处理 - 断网情况下点击收藏,应显示"网络请求失败"
- 注册流程 - 注册新用户,检查数据库只有一条记录
修复版本: v3.0.1 修复人员: Claude Sonnet 4.5