AACPOJ 班級與組織管理操作指南
這篇給誰看
本文是 AACPOJ 的班級與課程管理操作指南。如果你是管理員(課程管理員 / 班級管理員 / 網站管理員),往下展開每個操作看完整步驟。如果你是學生,看前面兩個章節了解系統全貌也很有幫助。
每個操作會標示所需權限:網站管理員 課程管理員以上 班級管理員以上。課程管理員自動擁有旗下所有班級的管理權限。
系統全景
AACPOJ 以「課程 → 班級 → 作業/考試/資源」為主軸。課程是最外層教學單位(例如「Level 0」「Level 1」),班級是課程底下的實際教學班別(例如「Level 1 — 2026 春季班」),所有教學活動(作業、公告、錄影、投影片、協作室、考試)都掛在班級上。
課程 Course
└─ 班級 Class
├─ 作業 Assignment
│ └─ 題目 AssignmentProblem
│ ├─ 學生狀態(judge + self-report)
│ └─ 題目資源(翻譯 / 提示 / 題解)
├─ 班級公告
├─ 課堂錄影
├─ 教學投影片
├─ 示範協作室(建班時自動建立)
└─ 相關競賽
學生加入流程目前由管理員手動加入(見下文「班級管理 → 手動新增班級成員」),不採公開申請。
權限速覽
| 操作 | 網站管理員 | 課程管理員 | 班級管理員 | 一般成員 |
|---|---|---|---|---|
| 編輯課程資訊 / 踢除成員 | ✓ | ✓ | — | — |
| 建立新班級 | ✓ | ✓ | — | — |
| 編輯班級資訊 | ✓ | ✓ | ✓ | — |
| 手動新增班級成員 | ✓ | ✓ | ✓ | — |
| 建立/編輯作業、題目、資源 | ✓ | ✓ | ✓ | — |
| 管理公告 / 錄影 / 投影片 | ✓ | ✓ | ✓ | — |
| 建立考試(目前限 Django 後台) | ✓ | — | — | — |
| 檢視全班進度 | ✓ | ✓ | ✓ | — |
Django 後台 /admin/ |
✓ | — | — | — |
常用入口
| 目的 | URL |
|---|---|
| 我所屬/管理的課程 | /courses/ |
| 課程首頁 | /course/<id>-<slug> |
| 班級首頁 | /course/<id>-<slug>/class/<cid>-<cslug> |
| 班級作業 | /homework/<class_id>/ |
| 外部 OJ 帳號綁定 | /oj-accounts/ |
| 協作室 | /collab/rooms/ |
| 筆記 | /notes/ |
URL 格式提醒:課程和班級 URL 用
id-slug(連字號連接),例如/course/4-lv1/class/6-lv1-2026-spring。舊的/organization/...URL 會自動 301 導到/course/...。
課程管理 課程管理員以上

編輯課程資訊(介紹、Logo、管理員)
URL:/course/<id>-<slug>/edit
- 進入課程首頁,點右上「編輯」
- 可修改:介紹(Markdown)、Logo、管理員列表(admins M2M)
- 儲存
/admin/judge/course/。檢視成員與踢除
- 成員列表:/course/<id>-<slug>/users
- 踢除:從成員頁點「踢除」按鈕 → 確認
建立新班級
URL:/course/<id>-<slug>/class/new
- 從課程首頁點「建立班級」
- 填:班級名稱(全系統唯一)、slug、描述
- 系統自動:建 Class 記錄、建示範協作室(擁有者 = 你)、把你加入
Class.admins - 自動導向班級首頁
建議命名:Level 1 — 2026 春季班,避免特殊字元。
班級管理 班級管理員以上
班級首頁是整個系統的教學中心:公告、作業、投影片、錄影、最近活動、相關競賽、班級排行,全部都在這一頁。

編輯班級資訊(Google Meet / Discord / 錄影資料夾)
URL:/course/<id>-<slug>/class/<cid>-<cslug>/edit
- 從班級首頁點右上「編輯」
- 可修改:名稱、描述、Google Meet URL、Discord URL、Google Drive 錄影資料夾 URL
/admin/judge/class/。手動新增班級成員
URL:POST /homework/<class_id>/add-member/
- 班級首頁或作業列表 → 「新增成員」
- 輸入關鍵字搜尋(帳號/姓名/Email)
- 確認新增 → 系統自動確保學生在課程內,再加入班級
班級公告
新增 / 編輯 / 刪除公告
- 新增:/homework/<class_id>/announcements/create/
- 編輯:/homework/<class_id>/announcements/<ann_id>/update/
- 刪除:/homework/<class_id>/announcements/<ann_id>/delete/
支援 Markdown,可勾選「置頂」永遠顯示在最上方。
課堂錄影
新增錄影 / 拖曳排序
URL:/homework/<class_id>/recordings/create/
填:標題(如「第 3 堂 — 二分搜尋」)、上課日期、影片連結(Google Drive)。Drive 檢視 URL 會自動轉成可嵌入 URL。
同日期的錄影可用 POST /homework/<class_id>/recordings/reorder/(拖曳)調順序。
教學投影片
支援三種類型:內建 HTML 投影片、PDF、外部連結(如 Google Slides)。
新增投影片
URL:/homework/<class_id>/slides/create/
- HTML:填檔名(如
binary-search-intro.html),實體檔須先放到/home/aacp/site/resources/slides/ - PDF:填相對路徑(如
pdf/slides-01.pdf) - 外部連結:直接填 URL
其他欄位:標題、slug(唯一)、所屬單元分類、排序值、可見性。
單元綁定(讓作業的單元名變成連結)
投影片可掛在某個 HomeworkCategory 上。學生在作業頁看到屬於該單元的題目時,單元名會變成可點擊連結,直接開投影片。
需先在 Django admin 建立對應的 HomeworkCategory(支援巢狀)。
作業系統
作業 = 一組題目 + 學生進度追蹤 + 自動同步外部 OJ 成績。題目可以是 AACPOJ 本站題、外部 OJ(CF / AtCoder / CSES / TIOJ / NCOJ)題、或閱讀/影片資源(不計分)。

建立新作業
URL:/homework/<class_id>/assignment/new/
- 班級首頁 → 作業列表 → 「新增作業」
- 填:標題、描述(Markdown)
- 勾選:
is_active:學生可見(取消則隱藏而不刪除)- 「學生可見全班概覽」:允許學生看其他同學的進度 </ul> </li>
- 儲存 → 跳到題目編輯頁
新增題目(AACPOJ 本站題)
URL:/homework/<class_id>/<assignment_id>/problems/add/
- OJ 選「AACPOJ」
- 選擇題目(下拉或搜尋)
- 設定分數(預設 = 題目原分)
- 必通過子題(選填):留空 = 必須 AC;填
1,2= 只需通過子題 1 和 2
新增題目(外部 OJ:CF / AtCoder / CSES / TIOJ / NCOJ)
- OJ 選對應系統
- 輸入題目 ID:
- Codeforces:
1538G - AtCoder:
abc270_e - CSES:題號
1194
</ul>
</li>
- 點「抓題名」自動填充標題
- 設定分數
- Codeforces:
新增非題目項目(閱讀 / 影片)
- 類型選「閱讀資源」或「影片」
- 填標題、URL
- 不計分、不需 AC,學生可自報「已讀」
排序題目 / 編輯 / 刪除
作業題目管理頁,拖曳左側把手可改順序,右側按鈕編輯/刪除。
- 拖曳排序:POST /homework/<class_id>/<assignment_id>/problems/reorder/
- 編輯:/homework/<class_id>/<assignment_id>/problems/<ap_id>/edit/
- 刪除:/homework/<class_id>/<assignment_id>/problems/<ap_id>/delete/
檢視單題全班狀態(+ 學生上傳的程式碼)
進題目編輯頁,下方列每位學生的 judge_status、self_status、通過子題、最後更新時間。外部 OJ 題目會顯示學生自己上傳的程式碼,給教師檢閱用。

全班進度總覽
URL:/homework/<class_id>/<assignment_id>/overview/
排行榜式表格。管理員永遠看得到;學生看得到的前提是作業勾「學生可見全班概覽」。

最近班級活動(上課前快速掌握)
URL:/homework/<class_id>/updates/
顯示班上最近的提交與同步更新。

題目資源:翻譯 / 提示 / 題解
全域資源 vs 作業專屬,怎麼分?
- 全域資源:掛在 Problem(AACPOJ)或
oj+external_id(外部題),所有作業用到這題都看得到。適合通用翻譯、官方題解。 - 作業專屬:只在該作業內顯示。適合和本週教學脈絡綁定的提示。
新增資源
URL:POST /homework/<class_id>/<assignment_id>/save-resource/
- 作業題目管理頁,每題旁有「+ 資源」
- 選類型:translation(翻譯)/ hint(提示,可多層)/ editorial(文字題解)/ video(影片講解)/ pitfall(常見錯誤)
- 填內容(Markdown 或 URL)
- 切換「全域 / 作業專屬」
- 儲存
編輯 / 刪除資源
- 編輯:/homework/resource/<resource_id>/edit/
- 刪除:/homework/resource/<resource_id>/delete/
- 檢視:/homework/resource/<resource_id>/(投影片可直接連這個 URL,例如外部題目的中文翻譯)
成績同步
學生在外部 OJ 的 AC 紀錄不會自動進來,要觸發同步。
前置:學生綁定外部 OJ 帳號
學生必須在 /oj-accounts/ 綁定對應 OJ 的 handle。
- 可自動同步:Codeforces、AtCoder、TIOJ、NCOJ
- 僅能自報:CSES(無公開 API,學生自己標
ac_confident)
同步特定學生 / 全班
- 單生:POST /homework/<class_id>/<assignment_id>/sync/(題目狀態頁點學生旁「同步」)
- 全班:POST /homework/<class_id>/<assignment_id>/sync-all/
查進度:GET /homework/<class_id>/<assignment_id>/get-status/(AJAX)
考試系統
主要用於入學測驗、期末測驗:寄一次性 Token 連結給考生,限時作答。
考試結構(Exam / Section / Question / ExamLink)
Exam
├─ ExamSection(區段,如「選擇題」「實作題」)
│ └─ ExamQuestion(考卷題目,從 Question 題庫取)
└─ ExamLink(考生連結,uuid token)
├─ Response(作答紀錄)
└─ AntiCheatLog(防作弊紀錄)建立考試(Django admin)僅網站管理員
URL:/admin/exams/exam/add/
- 基本:標題、時長、啟用、
open_at、close_at - 選項:
show_anti_cheat_warning、show_score_after_submit - 信件:HTML 模板、主旨、額外說明。模板變數:
{{ student_name }}、{{ exam_url }}、{{ deadline }}、{{ time_limit }} - 題庫:
/admin/exams/question/add/→ 區段:/admin/exams/examsection/add/→ 把題目加到考卷:/admin/exams/examquestion/add/
建立考生連結並寄信 僅網站管理員
URL:/admin/exams/examlink/add/
- 填:考試、學生 Email、姓名、家長 Email(CC)、額外時間
- 預約寄信:填
scheduled_send_at,由 crontab 自動寄 - 立即寄信:用 admin action「Send exam links」
- 考生連結格式:
https://<exam-host>/e/<token>/
考生作答流程 URL
- 收信點連結:
/e/<token>/ - 驗證身份:
/e/<token>/verify/ - 開始作答:
/e/<token>/start/ - 自動儲存草稿:
/e/<token>/save-draft/ - 交卷:
/e/<token>/finish/ - 查剩餘時間:
/e/<token>/time/
檢視成績與防作弊紀錄 僅網站管理員
- 成績總覽:/admin/exams/scoresoverview/
- 防作弊紀錄:/admin/exams/anticheatlog/(切換分頁、複製、右鍵、失焦等行為)
協作編輯室
師生即時協作寫程式,像 Google Docs 但寫 C++ 用的(Monaco Editor + Yjs)。每個班建立時系統自動建一個示範協作室。
建立協作室 / 邀請成員 / 改角色
- 建立:POST /collab/create/(從 /collab/rooms/)
- 邀請:POST /collab/invite/
- 角色:Editor(可編輯不可提交)、Viewer(只讀)
- 可設使用次數上限、有效期
- 改角色:POST /collab/change_role/(Owner 擁有完全控制,是唯一能提交程式的角色) </ul>
程式碼分享庫
/collab/share/:把常用模板(線段樹、Dijkstra、…)分享到 Level 分類庫,全站可見。上課臨時取用模板很方便。
筆記系統
兩種筆記:獨立筆記(任意)與單元筆記(綁作業單元)。完整功能介紹見 筆記系統升級。
管理員檢視所有學生的獨立筆記 僅網站管理員
URL:/notes/admin/
給教學診斷用,可看到所有學生的獨立筆記。
故障排除
學生說「我加不進班級」
- 目前學生無法自己申請加入,管理員要手動加。照「班級管理 → 手動新增班級成員」走一次就行
- 若加人時報錯「此班級未啟用」,檢查班級
is_active是否為 True(到/admin/judge/class/打勾)
作業成績沒同步過來
- 確認學生在
/oj-accounts/綁了該 OJ 的 handle - 確認 OJ 可自動同步(CF/AtCoder/TIOJ/NCOJ 可,CSES 不可)
- 手動觸發「全班同步」看是否有錯誤
- 檢查
SyncLog.last_error(/admin/homework/synclog/)
投影片打不開
- 非班級成員無法開
- 檢查實體檔案:
/home/aacp/site/resources/slides/<檔名> - slug 打錯會 404:檢查
/admin/homework/slide/
其他問題
Slack 或 Discord 問 Anna。
Comments