Files
luntan/.trae/documents/泸州高中摄影社论坛(Flask)实现计划.md

125 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 项目概述
- 框架Python Flask + Jinja2 服务端渲染REST API 供前端交互
- 角色:`未审核用户``普通用户``管理员`
- 审核点:注册身份审核、公开作品审核、活动投稿审核
## 技术栈与依赖
- 后端:`Flask``Flask-Login``Flask-WTF``Flask-SQLAlchemy``Flask-Migrate`
- 图片处理:`Pillow`
- 表单与校验:`WTForms`
- UI`Bootstrap`Jinja2 模板)
- 数据库:开发用 `SQLite`,部署用 `PostgreSQL`
- 可选:`Flask-Admin`(或自定义后台)、`Flask-Mail`(邮件通知)
## 数据库设计(核心表)
- `users`idemailusernamepassword_hashrolestatus(pending/approved/rejected)identity_photo_pathcreated_at
- `profiles`iduser_idavatar_pathbiogradeclass_namelinksupdated_at
- `posts`iduser_idtitledescriptionvisibility(public/followers/private)status(pending/approved/rejected)created_atpublished_at
- `post_images`idpost_idoriginal_pathweb_paththumb_pathexif_jsonorder_index
- `comments`idpost_iduser_idbodystatus(active/removed)created_at
- `follows`follower_idfollowee_idcreated_at唯一索引: follower_id+followee_id
- `activities`idtitlethemedescriptionstart_atend_atstatus(draft/published/closed)created_at
- `activity_submissions`idactivity_iduser_idstatus(pending/approved/rejected)created_at
- `submission_images`idsubmission_idoriginal_pathweb_paththumb_pathexif_jsonorder_index
- `likes`可选idpost_iduser_idcreated_at
- `notifications`iduser_idtypepayload_jsonread_atcreated_at
- `review_logs`idtarget_type(user/post/submission)target_idadmin_idaction(approve/reject)reasoncreated_at
## 目录结构
- `app/`:应用工厂(`create_app`)、配置、扩展注册
- `app/blueprints/``auth``users``posts``comments``follows``feed``activities``admin`
- `app/models/`SQLAlchemy 模型
- `app/services/`:图片处理、审核服务、通知服务
- `app/templates/`Jinja2 模板(含后台)
- `app/static/`CSS/JS/图片
- `uploads/``identity/``posts/``activities/`
- `migrations/`:数据库迁移
## 权限与审核流程
- 注册:用户提交基础信息 + 学生身份照片 → `status=pending` → 管理员审核通过后 `approved`,可登录和发帖
- 发帖:用户创建作品(多图)→ 若设置 `public`,则 `status=pending`,管理员审核通过后公开;`followers/private` 直接可见(仍可被管理员撤回)
- 活动投稿:在活动期内提交→管理员审核→通过后在活动展示页公开
- 管理员操作记录进入 `review_logs`
## 业务模块与页面
- 认证:注册、登录、退出、找回密码(可选邮件)
- 主页个人资料、TA的作品、关注/粉丝、活动投稿
- 作品:创建/编辑/删除、多图上传、EXIF展示、评论区
- 发现:全站公开作品流(按热度/最新),可筛选主题、活动
- 关注:显示所关注用户的最新作品(含非公开中 `followers` 可见)
- 活动:活动列表、详情、投稿入口、获奖/精选展示
- 管理后台:注册审核队列、公开作品审核、活动创建与审核、用户管理、审核日志
## API 路由草案
- `POST /api/auth/register`multipart含身份照
- `POST /api/auth/login``GET /api/auth/logout`
- `GET /api/users/<id>``PUT /api/users/<id>`(资料)
- `POST /api/posts``PUT /api/posts/<id>``DELETE /api/posts/<id>``GET /api/posts/<id>`
- `POST /api/posts/<id>/images`(追加图片),`DELETE /api/posts/<id>/images/<img_id>`
- `POST /api/posts/<id>/comments``GET /api/posts/<id>/comments``DELETE /api/comments/<id>`
- `POST /api/users/<id>/follow``DELETE /api/users/<id>/follow`
- `GET /api/feed/discover``GET /api/feed/following`
- `GET /api/activities``GET /api/activities/<id>`
- `POST /api/activities/<id>/submit`multipart多图
- 管理员:
- `GET /admin/reviews/users``POST /admin/reviews/users/<id>/approve|reject`
- `GET /admin/reviews/posts``POST /admin/reviews/posts/<id>/approve|reject`
- `POST /admin/activities``PUT /admin/activities/<id>``POST /admin/activities/<id>/publish|close`
- `GET /admin/reviews/submissions``POST /admin/reviews/submissions/<id>/approve|reject`
## 图片上传与处理
- 校验文件类型JPEG/PNG、大小限制、内容解码用 Pillow 防伪造)
- 生成:`thumb`(方形或短边)、`web`(最大边约 1600px、保留原图
- 提取EXIF相机、镜头、快门、光圈、ISO、焦距
- 存储:磁盘分目录;文件名 `uuid`;数据库保存路径与元数据
- 访问:统一 `send_from_directory` 或静态映射;考虑防盗链与权限检查(非公开资源鉴权)
## 活动模块设计
- 活动生命周期:`draft → published → closed`
- 字段:主题、时间窗、规则、允许每人投稿数量、是否匿名展示
- 审核:投稿队列、通过后进入活动展示;支持精选/获奖标记
## 关注与发现
- 发现流:`approved & public` 的作品,按 `score = w1*likes + w2*comments + w3*recency`
- 关注流:所关注用户的最新作品,按时间倒序;含 `followers` 可见内容
- 索引与缓存:热门榜单每日重算(可用简单缓存或定时任务)
## 通知与消息
- 事件:审核结果、评论提醒、关注提醒、活动邀请/通过结果
- 拉取:通知列表页与角标;邮件可选
## 管理后台
- 仪表盘:待审核计数、近期活动、违规内容处理
- 队列:注册、公开作品、活动投稿
- 用户管理:封禁/解除、角色变更、作品/评论移除
- 审核日志:可检索与导出
## 安全与合规
- 密码:`werkzeug.security` 哈希PBKDF2强密码政策
- 会话:`Flask-Login`保护关键路由CSRF 防护(`Flask-WTF`
- 上传:限制大小与类型,文件名随机化,路径隔离,权限控制
- 敏感信息:`SECRET_KEY`、数据库连接通过环境变量;不记录敏感日志
- 速率限制(可选):注册/登录/评论防刷
## 测试与验证
- 单元测试:模型、服务(图片处理、审核)
- 集成测试:注册→审核→发帖→公开→评论→关注→活动投稿全链路
- 工具:`pytest``Flask-Testing`(可选),`Flask-Migrate` 迁移验证
## 部署与环境
- 开发:`SQLite` + 内置服务器
- 生产:`Gunicorn + Nginx`Linux`Waitress`Windows`PostgreSQL`
- 静态与上传Nginx 映射,非公开资源走鉴权路由
- 初始脚本:创建管理员、迁移数据库、配置环境变量
## 里程碑与实施顺序
1. 项目骨架与配置、模型与迁移
2. 认证与注册审核链路
3. 作品与多图上传、EXIF、可见性
4. 评论与关注、发现与关注流
5. 活动模块与投稿审核
6. 管理后台与审核日志
7. 通知与优化、测试覆盖与部署
---
请确认是否按此方案开始实现,或指出需要调整的部分。