## 项目概述 - 框架: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`:id,email,username,password_hash,role,status(pending/approved/rejected),identity_photo_path,created_at - `profiles`:id,user_id,avatar_path,bio,grade,class_name,links,updated_at - `posts`:id,user_id,title,description,visibility(public/followers/private),status(pending/approved/rejected),created_at,published_at - `post_images`:id,post_id,original_path,web_path,thumb_path,exif_json,order_index - `comments`:id,post_id,user_id,body,status(active/removed),created_at - `follows`:follower_id,followee_id,created_at(唯一索引: follower_id+followee_id) - `activities`:id,title,theme,description,start_at,end_at,status(draft/published/closed),created_at - `activity_submissions`:id,activity_id,user_id,status(pending/approved/rejected),created_at - `submission_images`:id,submission_id,original_path,web_path,thumb_path,exif_json,order_index - `likes`(可选):id,post_id,user_id,created_at - `notifications`:id,user_id,type,payload_json,read_at,created_at - `review_logs`:id,target_type(user/post/submission),target_id,admin_id,action(approve/reject),reason,created_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/`,`PUT /api/users/`(资料) - `POST /api/posts`,`PUT /api/posts/`,`DELETE /api/posts/`,`GET /api/posts/` - `POST /api/posts//images`(追加图片),`DELETE /api/posts//images/` - `POST /api/posts//comments`,`GET /api/posts//comments`,`DELETE /api/comments/` - `POST /api/users//follow`,`DELETE /api/users//follow` - `GET /api/feed/discover`,`GET /api/feed/following` - `GET /api/activities`,`GET /api/activities/` - `POST /api/activities//submit`(multipart,多图) - 管理员: - `GET /admin/reviews/users`,`POST /admin/reviews/users//approve|reject` - `GET /admin/reviews/posts`,`POST /admin/reviews/posts//approve|reject` - `POST /admin/activities`,`PUT /admin/activities/`,`POST /admin/activities//publish|close` - `GET /admin/reviews/submissions`,`POST /admin/reviews/submissions//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. 通知与优化、测试覆盖与部署 --- 请确认是否按此方案开始实现,或指出需要调整的部分。