一种适配移动端的类校园集市、树洞、生存手册、车队网站,基于fable5完成的令人舒心的前端UI,以FastAPI + SQLite + 原生 JS 实现的校园社区全栈原型,包含树洞、游戏车队、二手集市、问答、课评、活动、私信、公告与简单的管理员后台。
campus-wall/
├── backend/
│ ├── main.py # 核心:认证 / 树洞 / 车队 / 集市 / 信用 / 热榜 / 提醒调度
│ └── extras.py # 扩展:问答 / 手册 / 课评 / 观察台 / 治理 / 失物 / 活动 / 私信 / 公告 / 举报
├── frontend/
│ ├── index.html # 前端单页(自适应手机端;不启动后端时自动降级为静态演示)
│ ├── app-extra.js # 扩展板块的动态渲染与发布表单
│ ├── polish.js # 交互与动效增强层
│ └── app-v4.js # v4:编辑器/回帖/车队增强/管理员后台/用户后台
├── requirements.txt
└── README.md
cd campus-wall/backend
pip install -r ../requirements.txt
python -m uvicorn main:app --reload --port 8000- http://127.0.0.1:8000 → 完整网站
- http://127.0.0.1:8000/docs → 交互式 API 文档(40+ 接口可直接调试)
首次启动自动建库并写入演示数据。数据库默认在 backend/campus.db,可用环境变量 WUTONG_DB 覆盖路径。
| 角色 | 邮箱 | 密码 |
|---|---|---|
| 管理员 | admin@campus.edu.cn | admin1234 |
| 已认证学生(车头) | laok@stu.demo.edu.cn | demo1234 |
| 已认证学生 | mixian@qq.com | demo1234 |
| 校友(DND 主持) | dm@gmail.com | demo1234 |
| 模块 | 要点 |
|---|---|
| 注册登录 | 仅 QQ/Gmail/edu.cn 邮箱;协议强制勾选;edu.cn 自动「已认证学生」;pbkdf2 + Bearer Token |
| 树洞 | 实名昵称/固定马甲/完全匿名;可见期 24h/7天/永久;可关评;辱骂词拦截;自伤词触发心理关怀(12356) |
| 游戏车队 | 完整开车模板;今晚8点/周五晚/长期固定队/自定义;上车下车;爽约 −3 / 准时签到 +1;四维队友评价;游戏别名合并 |
| 发车提醒 | 后台线程发车前 30 分钟站内通知 + 邮件(email_log 模拟);长期队自动滚动下一周期 |
| 二手集市 | 交易模板;禁售词拦截 −10 信用;担保费 2%;卖家信用面板;举报即冻结进入举证仲裁流程 |
| 问答求助 | 悬赏积分;仅提问者可采纳;采纳 +20+悬赏 经验;答疑头衔按采纳数升级 |
| 生存手册 | 11 个分类;防灌水——发帖不加经验,被收藏 +2、管理员加精 +50;收藏去重 |
| 课程评价 | 同课同学期限评一次;人身攻击词拦截;<5 条评价不显示分数;老师更正以附注展示不删评 |
| 文明观察台 | 煽动词(求扩散/避雷)拦截;长数字自动打码;发帖需信用 ≥75;先审后示,审核中仅本人可见;被指认方回应入口;管理员只公示结果与依据 |
| 治理公示 | 匿名化账号(用户 A****7);违规类型/结果/依据/时间;一键申诉 |
| 失物招领 | 捡到/丢失、地点、时间、联系方式、认领状态;失物被认领拾主 +2 信用 |
| 校园活动 | 9 类(招新/讲座/组队/拼车/各类搭子);加入通知发起人 |
| 私信 | 新用户每日 5 条、普通 20 条、信用 ≥85 不限;被 5 人拉黑即停用;可拉黑 |
| 公告 | 强提醒/普通两级;已读确认与已读人数统计 |
| 信用系统 | 6 项权限门槛(匿名≥60、交易≥70、观察台≥75…);全部加减分记入流水 |
| 热榜 | (浏览×0.2+收藏×3+回复×2+点赞−举报×5)×时间衰减+管理员权重 |
| 交互增强 | 登录/退出状态切换;点赞防重复+飘字;表单必填校验(抖动提示)与防重复提交;Esc 关弹窗、弹窗锁定背景滚动;站内搜索(回车过滤当前页);通知小红点 30s 轮询、进「我的信用」自动已读;公告条与重要弹窗当日关闭记忆;骨架屏加载占位;发车倒计时最后 10 分钟脉冲告警。全部动效尊重系统"减少动态效果"设置 |
| 账号体系 v4 | 注册/登录独立弹窗;注册必须邮箱验证码(演示模式自动回填,接 SMTP 即为真实发送);协议默认不勾选且强制勾选,附《用户协议》《社区规范》摘要全文弹窗;注册成功自动登录;登录/注册后自动刷新页面 |
| 富文本编辑器 | 全站发帖/回帖 textarea 自动挂工具栏:加粗/斜体/标题一二/引用/超链接/列表/公式/日期时间/emoji/代码;支持 Markdown + BBCode 渲染;粘贴或拖入图片自动插入(≤400KB);中途关闭弹出「是否要放弃您的帖子?」确认 |
| 全站回帖 | 树洞/集市/观察台/活动/手册均可展开评论区回帖,关评帖服务端拒绝,辱骂词拦截 |
| 车队 v4 | 上车前弹确认框(含车队完整信息与爽约规则);请假功能(请假后退出/漏发车不扣分、不提醒);爽约窗口改为发车前 30 分钟;上车立即向车友推送时间/语音链接/注意事项,3 分钟后提醒车头;车头可改注意事项/提醒时间/频道链接并全员通知;时间机制支持日历式先选日期再选时间 |
| 观察台解码 | 内容默认打码;信用 ≥ 阈值(管理员可调,默认 90)且勾选《吃瓜不扩散协议》的用户可解码查看原文,解码内容带「勿扩散」标记 |
| 反馈系统 | 顶栏「💡 反馈」提交 bug/建议/畅想;管理员采纳并发放经验+信用奖励,结果通知提交人 |
| 管理员后台 | 站点统计、用户管理(信用/身份)、内容删除(可记入治理公示)、公告发布、权限阈值动态调整(即时生效)、生存手册分类增删改、数据库备份下载、过期内容清理(手动+每小时自动) |
| 用户后台 | 修改密码、验证码换绑邮箱、关闭陌生人私信、我的帖子管理(删除)、信用晋升路线(差几分解锁什么、怎么涨分) |
观察台过审:POST /api/observe/{id}/review;手册加精:POST /api/handbook/{id}/feature;课评更正代提交:POST /api/courses/review/{id}/correction。
main.py 的 notify() 目前写入 email_log 表(GET /api/emails 可查看)。接入真实邮箱把写表部分替换为 smtplib 发送即可(QQ 邮箱 SMTP:smtp.qq.com:465,需生成授权码)。
单校规模 SQLite 足够,并发上来换 PostgreSQL。生产环境务必:HTTPS、给 /api/emails 和管理员接口加严格鉴权、接入完善敏感词库、加验证码与频率限制、日志与备份。
当前项目为校园社区demo,不建议直接用于生产环境