校园匿名社区 Web 项目,支持匿名发帖、评论互动、点赞收藏、匿名私信、站内通知、内容审核、推荐排序与管理员工作台。
- 前端:Vue 3 + TypeScript + Vite + Pinia + Vue Router
- 后端:Django 6 + DRF + SimpleJWT + SimpleUI
- 数据库:开发环境支持 SQLite / PostgreSQL,生产配置为 PostgreSQL
- 缓存:Redis 已接入未读消息摘要缓存,Redis 不可用时会自动回退数据库统计
- AI 审核:DeepSeek
匿名宇宙/
├── backend/ # Django 后端
├── frontend/ # Vue 前端
├── docx/ # 设计文档、TODO、Bug 记录
├── docker-compose.dev.yml # 开发环境 PostgreSQL + Redis
└── README.md
- 匿名身份:注册后自动生成随机昵称与头像种子,支持刷新匿名身份
- 发帖系统:6 个标签、背景色、图片上传、投票、定时自毁、私信开关
- 评论系统:嵌套回复、楼主标识、点赞、举报、审核状态回显
- 互动系统:帖子/评论点赞、帖子收藏、举报处理、站内通知
- 消息中心:匿名私信会话、通知列表、未读摘要、全部已读
- 推荐排序:根据点赞、收藏、评论行为计算标签偏好
- 管理后台:管理员工作台、审核详情、举报中心、用户中心、推荐拆解
- 搜索:已实现正文关键词相关度排序,综合命中位置、命中频次和互动热度
- 未读数:已优先走 Redis 缓存;Redis 不可用时自动回退数据库统计
- AI 审核:
- 硬拦截词:直接
reject - 软标记词:
not_run+ai_suspect - DeepSeek:返回
accept / confuse / reject
- 硬拦截词:直接
- 图片处理:当前由后端同步执行 Pillow 压缩、转 JPEG、生成缩略图
- 异步任务:Celery 暂未接入;过期检查、审核超时等仍以请求触发为主
- Python 3.13 推荐
- Node.js 18+
- npm 9+
- 可选:Docker / Docker Compose
cd backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt如果仓库里已经有 backend/venv,也可以直接复用:
cd backend
source venv/bin/activate后端会自动读取以下文件:
backend/.envbackend/.env.local
当前最常用的环境变量如下:
| 变量 | 说明 | 默认值 |
|---|---|---|
DJANGO_SETTINGS_MODULE |
Django 配置模块 | config.settings.dev |
USE_POSTGRES |
开发环境是否使用 PostgreSQL | 未设置时使用 SQLite |
DEEPSEEK_API_KEY |
DeepSeek API Key | 空 |
DEEPSEEK_MODEL |
DeepSeek 模型名 | deepseek-chat |
DEEPSEEK_BASE_URL |
DeepSeek API 地址 | https://api.deepseek.com |
DEEPSEEK_TIMEOUT |
AI 审核超时时间(秒) | 25 |
REDIS_URL |
Redis 连接串 | redis://127.0.0.1:6379/0 |
REDIS_TIMEOUT |
Redis 连接超时(秒) | 0.5 |
REDIS_UNREAD_TTL |
未读摘要缓存 TTL(秒) | 120 |
DB_NAME |
PostgreSQL 数据库名 | anonymous_wall |
DB_USER |
PostgreSQL 用户名 | postgres |
DB_PASSWORD |
PostgreSQL 密码 | 空 |
DB_HOST |
PostgreSQL 主机 | localhost |
DB_PORT |
PostgreSQL 端口 | 5432 |
一个可参考的 backend/.env.local 示例:
USE_POSTGRES=true
DEEPSEEK_API_KEY=your_deepseek_api_key
DEEPSEEK_MODEL=deepseek-chat
DEEPSEEK_BASE_URL=https://api.deepseek.com
DEEPSEEK_TIMEOUT=25
REDIS_URL=redis://127.0.0.1:6379/0
REDIS_TIMEOUT=0.5
REDIS_UNREAD_TTL=120开发环境有两种方式:
不设置 USE_POSTGRES=true 时,Django 会直接使用:
backend/db.sqlite3
适合快速本地体验。
先启动容器:
docker compose -f docker-compose.dev.yml up -d再在 backend/.env.local 中设置:
USE_POSTGRES=true当前 docker-compose.dev.yml 已包含 Redis:
docker compose -f docker-compose.dev.yml up -dRedis 目前主要用于:
- 顶部导航栏未读消息摘要缓存
- 通知/私信未读数的短 TTL 缓存
即使 Redis 没启动,项目也可以跑,只是会回退为数据库统计。
cd backend
source venv/bin/activate
python manage.py migratecd backend
source venv/bin/activate
python manage.py runserver默认地址:
- API / Admin: http://localhost:8000
cd frontend
npm installcd frontend
npm run dev默认地址:
cd frontend
npm run buildAI 审核逻辑在:
审核顺序:
- DFA 敏感词过滤
- DeepSeek 文本审核
- 管理员人工复核
- 命中硬拦截词:直接拒绝发布
- 命中软标记词:标为
ai_suspect,ai_decision=not_run
系统期望 DeepSeek 返回 JSON,字段为:
decisionrisk_levelreason
其中 decision 只允许:
acceptconfusereject
如果 AI 调用失败,系统会自动回退为人工复核。
如果未配置 DEEPSEEK_API_KEY:
- 项目仍可运行
- AI 审核会跳过
- 审核结果会回落为“未配置 AI key,跳过审核”的路径
如果你想手动创建:
cd backend
source venv/bin/activate
python manage.py createsuperuser项目内置了一个大规模演示数据命令:
cd backend
source venv/bin/activate
python manage.py reset_demo_data这个命令会:
- 清空现有数据库内容
- 重建管理员账号
- 生成大量用户、帖子、评论、举报、通知、私信、投票与推荐行为数据
重建后的管理员账号固定为:
- 账号:
Admin - 密码:
admin
管理后台入口:
当前后台主入口已经是工作台,不是传统 Django change list 工作流。主要页面有:
/admin/workbench/dashboard//admin/workbench/review-queue//admin/workbench/reports//admin/workbench/content//admin/workbench/users//admin/workbench/recommendation//admin/workbench/operations/
cd backend
source venv/bin/activate
python manage.py migrate
python manage.py runserver
python manage.py createsuperuser
python manage.py reset_demo_data
python manage.py shellcd frontend
npm install
npm run dev
npm run builddocker compose -f docker-compose.dev.yml up -d
docker compose -f docker-compose.dev.yml downPOST /api/auth/register/POST /api/auth/login/POST /api/auth/token/refresh/GET /api/auth/me/PATCH /api/auth/preferences/GET /api/auth/dashboard/POST /api/auth/identities/refresh/
GET /api/posts/GET /api/home/meta/POST /api/posts/create/GET /api/posts/{id}/PATCH /api/posts/{id}/edit/POST /api/posts/{id}/vote/DELETE /api/posts/{id}/delete/
GET /api/posts/{id}/comments/POST /api/posts/{id}/comments/create/DELETE /api/comments/{id}/delete/
POST /api/posts/{id}/like/POST /api/posts/{id}/favorite/POST /api/comments/{id}/like/POST /api/reports/create/GET /api/notifications/POST /api/notifications/read-all/POST /api/notifications/{id}/read/GET /api/messages/unread-summary/GET /api/messages/conversations/POST /api/messages/send/POST /api/messages/conversations/{id}/reply/POST /api/messages/conversations/{id}/block/
- Redis 目前只落了一版未读摘要缓存,还没有扩展到热帖缓存、限流和 Celery
- Celery、异步图片处理、对象存储、Nginx 生产编排目前都还没有落地
- 评论回复通知、私信举报、修改密码等设计文档中的能力仍未完整实现
- 开发环境下部分管理与测试更适合配合
reset_demo_data一起使用
项目的设计文档、TODO 和历史记录统一放在:
其中最重要的两份是: