跳到主要内容
版本:Current

系统架构

Portal 是 Django 单体 + 服务端渲染。没有独立 SPA、没有 Django REST Framework 作为主 API。少量 JSON 端点仅用于 Drive 状态/激活和教室回执解析。

运行时拓扑(生产)​

静态资源由 WhiteNoise 在 gunicorn 进程内提供(collectstatic 之后)。DEBUG=False 时 Django 不自动挂 media;未配 R2 时需 Nginx 自行暴露 MEDIA_ROOT。

仓库不包含 systemd unit、Nginx site 配置和 /home/ubuntu/deploy.sh。部署步骤以服务器实际文件为准,见 Production Deployment。

应用分层​

业务规则优先放在 services / registry,而不是堆在模板里。招新状态机几乎全部在 recruitment/services.py。

请求内横切​

机制位置
认证django-allauth,SOCIALACCOUNT_ONLY=True
权限Mixin + accounts.utils
导航可见性core.context_processors.treasury_nav
志愿排序弹窗core.context_processors.preference_rank_prompt
邮件异步mailing.async_notify.schedule_notification(transaction.on_commit + 后台线程)
提交幂等submit_token + core/submit_guard.py
审计core.ActivityLog

时区​

TIME_ZONE = America/New_York,USE_TZ = True。表单 datetime-local 与页面展示按美东处理。Cron 若跑在 UTC 主机上需要换算,见 Scheduled Jobs。