课堂签到
API 事实来源:Django 后端自动文档
为什么签到锚定课程实例
checkins 管理课程实例上的签到会话和学生签到记录。它依赖课程和用户班级信息,不独立维护课表。
代码入口:
backend/apps/checkins/models/backend/apps/checkins/views/backend/apps/checkins/serializers/backend/apps/checkins/services/
会话与名册
签到会话锚定 CourseOccurrence,同一个课程实例重复创建签到保持幂等。这样教师、学生、班牌和课程查询都围绕同一课时事实工作。
学生名册通过课程班级与用户 student_class 匹配。这个匹配依赖班级字符串,改课程班级字段或用户班级字段会改变签到覆盖范围。
非管理员只能管理自己课程的签到数据;学生只能看自己的签到和课表。
时间相关行为
- 改状态自动流转前,先确认课时时间、时区和前端当天视图。
- 签到状态与当前时间相关,测试需要覆盖边界时间。
预留能力
- 新增签到方式时,需要定义
method、source、置信度和操作日志策略。 - 班牌设备目前不写入签到。接入前需要设计设备身份、学生身份和防重放规则。
- 人脸识别字段已有预留,但 face-service 尚未进入主签到流程。