# 用户注册登录和收藏功能实现说明 ## 功能概述 本次更新为ZJPB项目添加了完整的用户系统,包括: - ✅ 用户注册/登录(用户名+密码) - ✅ 工具收藏功能 - ✅ 收藏分组管理(文件夹) - ✅ 用户中心(个人资料、收藏列表) - ✅ 多用户类型支持(Admin和User) ## 部署步骤 ### 1. 创建数据库表 运行数据库迁移脚本创建新表: ```bash python create_user_tables.py ``` 这将创建以下表: - `users` - 用户表 - `folders` - 收藏分组表 - `collections` - 收藏记录表 ### 2. 启动应用 ```bash python app.py ``` 或使用现有的启动方式。 ## 功能说明 ### 1. 用户注册 **访问路径:** `/register` - 用户名:至少3个字符 - 密码:至少6个字符 - 注册成功后自动登录并跳转到首页 ### 2. 用户登录 **访问路径:** `/login` - 输入用户名和密码 - 登录成功后跳转到首页或之前访问的页面 ### 3. 导航栏用户菜单 登录后,导航栏右侧会显示用户菜单: - 显示用户名和头像(或首字母) - 下拉菜单包含: - 👤 个人中心 - ⭐ 我的收藏 - 🚪 退出登录 ### 4. 收藏功能 **在工具详情页:** - 登录后可看到"收藏"按钮 - 点击按钮收藏/取消收藏 - 已收藏时按钮变为金色 - 未登录时点击会提示登录 **前端页面:** - detail_new.html - 添加了收藏按钮 - 自动检查登录状态和收藏状态 - Toast消息提示操作结果 ### 5. 用户中心 **访问路径:** `/user/profile` 显示内容: - 侧边栏:头像、用户名、个人简介、导航菜单 - 主内容区: - 统计卡片(收藏数、文件夹数) - 最近收藏列表(最多5条) ### 6. 我的收藏 **访问路径:** `/user/collections` 功能: - 文件夹标签页切换 - 工具卡片网格展示 - 分页支持 - 空状态提示 ## API端点 ### 认证API ``` POST /register - 用户注册(form) POST /login - 用户登录(form) GET /logout - 用户登出 GET /api/auth/status - 获取登录状态(JSON) ``` ### 收藏API(需登录) ``` POST /api/collections/toggle - 收藏/取消收藏 Body: { site_code: "12345678" } GET /api/collections/status/:site_code - 查询收藏状态 Response: { is_collected: true/false, collection_id: 1, folder_id: null } GET /api/collections/list - 获取收藏列表 Query: folder_id, page, per_page Response: { collections: [...], total: 10, page: 1, ... } PUT /api/collections/:id/note - 更新收藏备注 Body: { note: "备注内容" } PUT /api/collections/:id/move - 移动收藏到文件夹 Body: { folder_id: 1 } ``` ### 文件夹API(需登录) ``` GET /api/folders - 获取文件夹列表 POST /api/folders - 创建文件夹 Body: { name: "文件夹名", description: "", icon: "📁" } PUT /api/folders/:id - 更新文件夹 Body: { name: "", description: "", icon: "", sort_order: 0 } DELETE /api/folders/:id - 删除文件夹(级联删除收藏) ``` ### 用户资料API(需登录) ``` PUT /api/user/profile - 更新用户资料 Body: { bio: "", avatar: "", is_public_profile: false } ``` ## 数据库模型 ### User(用户表) | 字段 | 类型 | 说明 | |------|------|------| | id | Integer | 主键 | | username | String(50) | 用户名(唯一) | | password_hash | String(255) | 密码哈希 | | email | String(100) | 邮箱(可选) | | avatar | String(500) | 头像URL | | bio | String(200) | 个人简介 | | is_active | Boolean | 是否启用 | | is_public_profile | Boolean | 是否公开资料 | | created_at | DateTime | 创建时间 | | last_login | DateTime | 最后登录时间 | ### Folder(收藏分组表) | 字段 | 类型 | 说明 | |------|------|------| | id | Integer | 主键 | | user_id | Integer | 用户ID | | name | String(50) | 文件夹名称 | | description | String(200) | 描述 | | icon | String(50) | 图标emoji | | sort_order | Integer | 排序权重 | | is_public | Boolean | 是否公开 | | public_slug | String(100) | 公开链接标识 | | created_at | DateTime | 创建时间 | ### Collection(收藏记录表) | 字段 | 类型 | 说明 | |------|------|------| | id | Integer | 主键 | | user_id | Integer | 用户ID | | site_id | Integer | 网站ID | | folder_id | Integer | 文件夹ID(可选) | | note | Text | 备注 | | created_at | DateTime | 创建时间 | | updated_at | DateTime | 更新时间 | ## 技术实现 ### 多用户类型支持 - Admin模型:`get_id()` 返回 `"admin:{id}"` - User模型:`get_id()` 返回 `"user:{id}"` - `user_loader` 根据前缀加载不同类型的用户 ### 安全特性 - 密码使用 Werkzeug 的 `generate_password_hash` 加密 - 最短密码长度:6位 - 最短用户名长度:3位 - Flask-Login 管理会话 - 路由保护:`@login_required` 装饰器 - 用户类型检查:`isinstance(current_user, User)` ### 前端特性 - Tailwind CSS 设计风格(复用admin_login.html) - JavaScript无侵入式增强 - 异步API调用(Fetch) - Toast消息提示 - 响应式设计 ## 文件清单 ### 新增文件 ``` templates/auth/register.html - 注册页面 templates/auth/login.html - 登录页面 templates/user/profile.html - 用户中心 templates/user/collections.html - 收藏列表 create_user_tables.py - 数据库迁移脚本 USER_SYSTEM_README.md - 本说明文档 ``` ### 修改文件 ``` models.py - 添加User、Folder、Collection模型,修改Admin.get_id() app.py - 添加认证路由、收藏API、文件夹API、用户路由 templates/base_new.html - 更新导航栏,添加用户菜单 templates/detail_new.html - 添加收藏按钮和JavaScript ``` ## 测试步骤 1. **用户注册流程** - 访问 `/register` - 输入用户名和密码 - 提交表单 - 验证自动登录成功 2. **用户登录流程** - 访问 `/login` - 输入正确的用户名和密码 - 验证登录成功并跳转 3. **收藏功能** - 登录后访问任意工具详情页 - 点击"收藏"按钮 - 验证按钮状态变为"已收藏" - 再次点击取消收藏 4. **我的收藏** - 访问 `/user/collections` - 验证收藏的工具显示正确 - 测试文件夹切换 5. **用户中心** - 访问 `/user/profile` - 验证统计数据正确 - 验证最近收藏列表 ## 后续优化方向 ### 已实现的MVP功能 - ✅ 基础注册登录 - ✅ 收藏/取消收藏 - ✅ 收藏列表展示 - ✅ 基础文件夹管理 ### 待实现的增强功能 - ⏳ 收藏备注编辑UI - ⏳ 文件夹拖拽移动 - ⏳ 批量收藏操作 - ⏳ 收藏导出(CSV/JSON) - ⏳ 公开收藏列表(分享) - ⏳ 收藏统计图表 - ⏳ 邮箱验证 - ⏳ 忘记密码 - ⏳ 头像上传 - ⏳ 第三方登录 ## 注意事项 1. **管理员与普通用户分离** - 管理员账号无法使用收藏功能 - 管理员登录入口:`/admin/login` - 普通用户登录入口:`/login` 2. **数据完整性** - 删除用户会级联删除其所有收藏和文件夹 - 删除文件夹会级联删除其中的收藏记录 - 删除网站不会删除相关收藏(保留历史记录) 3. **性能优化** - 收藏列表查询使用了join避免N+1问题 - 添加了必要的数据库索引 - 分页支持大量收藏 ## 技术支持 如有问题,请查看: - Flask-Login 文档:https://flask-login.readthedocs.io/ - SQLAlchemy 文档:https://docs.sqlalchemy.org/ - Tailwind CSS 文档:https://tailwindcss.com/ --- **版本:** v1.0 **更新日期:** 2025-02-06 **作者:** Claude Sonnet 4.5