代码架构
请求路径
招新写操作应走 recruitment/services.py,避免在 view 里直接改状态并漏掉邮件或 ActivityLog。
关键大文件
| 文件 | 职责 |
|---|---|
recruitment/services.py | 状态机、志愿、面试预约、interest window(体积最大) |
recruitment/views.py | 三角色招新页面 |
mailing/registry.py | 业务事件 → 邮件 |
accounts/utils.py | RBAC 判定 |
files/services.py + files/permissions.py | 上传与下载鉴权 |
core/templatetags/ui_components.py | {% button %} / {% form_field %} |
异步模型
没有 Celery。两处用线程:
- 邮件:
mailing/async_notify.py—on_commit后daemon线程 - Zoom:
recruitment/zoom.py— 默认后台建会(ZOOM_CREATE_INLINE=false)
进程重启会丢掉未跑完的线程任务。需要可靠队列时再引入 broker;当前文档不假装已有。