Skip to content

班牌设备

API 事实来源:Django 后端自动文档

为什么班牌不用用户登录

signage 管理班牌设备生命周期、设备认证、展示配置和设备侧课表。班牌是长期放置在教室门口的显示终端,不绑定某个用户会话;因此设备侧使用独立 device token,管理侧才使用普通用户认证。

代码入口:

  • backend/apps/signage/models/
  • backend/apps/signage/views/
  • backend/apps/signage/serializers/
  • backend/apps/signage/authentication.py
  • backend/apps/signage/tokens.py

设备身份

  • SignageDeviceClassroom 一对一绑定。
  • 激活码和设备 token 只存哈希,明文只在签发时返回。
  • 设备侧接口只使用 Authorization: Bearer <device_token>
  • 管理侧接口使用普通用户认证,当前仅 superadmin 可管理。

课表来源

班牌课表只读取 CourseOccurrence,暂不合并手动借用。这让班牌展示保持接近教学课表事实,避免把审批中的临时借用直接显示成课程安排。若以后需要展示借用,应先确认 Android 端数据结构、缓存策略和展示优先级。

激活与令牌

激活码是一次性凭据,设备 token 是长期凭据。两者的明文只在签发时返回,数据库只保存哈希。调整激活流程时,关键是保持一次性激活、设备唯一性和令牌撤销能力。

当前未闭合的边界

  • 班牌可以注册/识别人脸相关请求,但主签到流程尚未依赖它。
  • 接入 face-service 或签到写入前,需要单独设计设备身份、学生身份、防重放、失败降级和操作日志。
  • APK 更新、展示配置、课表展示属于设备运维能力,不属于用户端权限模型。