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

7.0 KiB
Raw Blame History

项目概述

  • 框架Python Flask + Jinja2 服务端渲染REST API 供前端交互
  • 角色:未审核用户普通用户管理员
  • 审核点:注册身份审核、公开作品审核、活动投稿审核

技术栈与依赖

  • 后端:FlaskFlask-LoginFlask-WTFFlask-SQLAlchemyFlask-Migrate
  • 图片处理:Pillow
  • 表单与校验:WTForms
  • UIBootstrapJinja2 模板)
  • 数据库:开发用 SQLite,部署用 PostgreSQL
  • 可选:Flask-Admin(或自定义后台)、Flask-Mail(邮件通知)

数据库设计(核心表)

  • usersidemailusernamepassword_hashrolestatus(pending/approved/rejected)identity_photo_pathcreated_at
  • profilesiduser_idavatar_pathbiogradeclass_namelinksupdated_at
  • postsiduser_idtitledescriptionvisibility(public/followers/private)status(pending/approved/rejected)created_atpublished_at
  • post_imagesidpost_idoriginal_pathweb_paththumb_pathexif_jsonorder_index
  • commentsidpost_iduser_idbodystatus(active/removed)created_at
  • followsfollower_idfollowee_idcreated_at唯一索引: follower_id+followee_id
  • activitiesidtitlethemedescriptionstart_atend_atstatus(draft/published/closed)created_at
  • activity_submissionsidactivity_iduser_idstatus(pending/approved/rejected)created_at
  • submission_imagesidsubmission_idoriginal_pathweb_paththumb_pathexif_jsonorder_index
  • likes可选idpost_iduser_idcreated_at
  • notificationsiduser_idtypepayload_jsonread_atcreated_at
  • review_logsidtarget_type(user/post/submission)target_idadmin_idaction(approve/reject)reasoncreated_at

目录结构

  • app/:应用工厂(create_app)、配置、扩展注册
  • app/blueprints/authuserspostscommentsfollowsfeedactivitiesadmin
  • 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/registermultipart含身份照
  • POST /api/auth/loginGET /api/auth/logout
  • GET /api/users/<id>PUT /api/users/<id>(资料)
  • POST /api/postsPUT /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>/commentsGET /api/posts/<id>/commentsDELETE /api/comments/<id>
  • POST /api/users/<id>/followDELETE /api/users/<id>/follow
  • GET /api/feed/discoverGET /api/feed/following
  • GET /api/activitiesGET /api/activities/<id>
  • POST /api/activities/<id>/submitmultipart多图
  • 管理员:
    • GET /admin/reviews/usersPOST /admin/reviews/users/<id>/approve|reject
    • GET /admin/reviews/postsPOST /admin/reviews/posts/<id>/approve|reject
    • POST /admin/activitiesPUT /admin/activities/<id>POST /admin/activities/<id>/publish|close
    • GET /admin/reviews/submissionsPOST /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、数据库连接通过环境变量;不记录敏感日志
  • 速率限制(可选):注册/登录/评论防刷

测试与验证

  • 单元测试:模型、服务(图片处理、审核)
  • 集成测试:注册→审核→发帖→公开→评论→关注→活动投稿全链路
  • 工具:pytestFlask-Testing(可选),Flask-Migrate 迁移验证

部署与环境

  • 开发:SQLite + 内置服务器
  • 生产:Gunicorn + NginxLinuxWaitressWindowsPostgreSQL
  • 静态与上传Nginx 映射,非公开资源走鉴权路由
  • 初始脚本:创建管理员、迁移数据库、配置环境变量

里程碑与实施顺序

  1. 项目骨架与配置、模型与迁移
  2. 认证与注册审核链路
  3. 作品与多图上传、EXIF、可见性
  4. 评论与关注、发现与关注流
  5. 活动模块与投稿审核
  6. 管理后台与审核日志
  7. 通知与优化、测试覆盖与部署

请确认是否按此方案开始实现,或指出需要调整的部分。