feat: 初始版本,圆角主题与首次管理员引导

This commit is contained in:
2025-12-07 10:53:52 +08:00
commit 63db6a0815
43 changed files with 1293 additions and 0 deletions

View File

@@ -0,0 +1,125 @@
## 项目概述
- 框架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. 通知与优化、测试覆盖与部署
---
请确认是否按此方案开始实现,或指出需要调整的部分。