后端系统说明文档¶
Author: Zhenyu Yang yangzhenyu@sust.edu.cn
Last updated: Dev 13, 2025
本文档描述 Classroom Manager 后端核心实现方案和模块职责。
架构与模块概览¶
配置:
classroom_manager/settings.py使用环境变量配置调试模式、密钥、MySQL 数据库及 JWT 生命周期,REST framework 默认要求认证并提供分页支持;WEBAUTHN_RP_ID/WEBAUTHN_RP_NAME/WEBAUTHN_ORIGIN控制无密码登录的 Relying Party 信息。路由:
classroom_manager/urls.py以/api/v1/为统一前缀,注册了用户、教室、借用、报修、违规等资源的 ViewSet,并提供上传与公开教室查询等额外路由。认证:默认采用 SimpleJWT,支持邮箱登录、微信登录、WebAuthn 无密码登录和邮箱注册,并可选开启基于时间的一次性密码(TOTP)双因素认证。所有 API 返回统一的
success/error响应结构。
主要业务模块¶
账户(accounts)
模型
User扩展了角色(学生、教师、助理、秘书、超级管理员等)与状态字段,使用邮箱/工号作为账号标识。API 提供用户查询、创建、角色与状态变更,以及邮箱/微信登录注册、外教邀请等功能。
教室(classrooms)
Classroom模型维护教学楼、房间号、容量、设备、状态与维护时间等信息。ViewSet 支持条件过滤、修改、删除,并提供空闲教室查询接口,结合借用记录排除时间冲突。
PublicClassroomViewSet允许匿名访问可用/占用的教室列表。
借用(borrowings)
BorrowApplication模型记录申请人、审核角色、时间区间、用途及状态。创建申请时根据申请人角色自动推断审核人角色,并在提交前校验时间冲突、结束时间在开始时间之后以及提前 6 小时的限制。
提供审核(批准、驳回、转交)与申请人主动取消的接口。
报修(repairs)
RepairTicket模型关联申请人、指派人、教室、描述、图片与状态。普通创建会检查同教室是否已有未关闭工单,紧急报修入口允许直接创建并附带值班电话。
助理可更新工单状态并成为指派人,提交人可确认完成。
违规上报(abuse)
AbuseReport模型记录举报人、教室、描述、图片及处理状态。非超级管理员仅能查看和修改自己的举报;超级管理员可更新处理结果。
通用能力(common)
统一的
success/error响应封装。upload_file集成了可配置的文件存储服务,支持本地磁盘与 S3 兼容对象存储两种模式,默认写入服务器/var/www/classroom-manager/uploads/。
开发与运维建议¶
权限校验:重要操作(审核、状态修改等)均在 ViewSet 中通过角色判断控制,扩展新角色时需同步更新相应逻辑。
数据库约束:教室
building + room_number唯一,借用与报修记录按创建时间倒序,避免重复与便于查询。时间与时区:系统默认时区为
Asia/Shanghai,借用相关校验使用当前时间加提前量,部署时确保服务器时间同步。日志:默认输出到控制台,生产可在
LOGGING中追加文件或集中式日志配置。