記帳網站(二):四條功能,一條一條打通
照著吃貨站的節奏,每條功能都走「讀 PROJECT.md → 建置 → 對答案 → 存檔」。差別是這次的提示詞要你自己寫,老師只提供對答案的表格。
本週結束時你會
今天的時間安排
| 0:00–0:10 | 檢查 M1:示範資料已匯入、PROJECT.md 前三段完成 |
| 0:10–0:45 | 功能 1【自己做,有範例提示詞】記帳列表 |
| 0:45–1:20 | 功能 2【自己做】記一筆 |
| 1:20–1:30 | 休息 |
| 1:30–1:55 | 功能 3【自己做】刪除與確認 |
| 1:55–2:30 | 功能 4【自己做】月統計;週誌、本週檢核 |
進度較快的學生會一次要求 AI 做兩三條功能。請他們停下來,指出「一次一條」的理由:每條功能都要先對答案才存檔,出錯時才知道是哪一條造成的。進度落後的學生,優先完成功能 1、2、4,刪除可以延到下週前半。
寫提示詞的格式
每條功能的提示詞都包含這五個部分,缺一不可:
- 請先讀 PROJECT.md
- 只做這一條功能:功能名稱與網址
- 需求細節:從需求說明書抄過來,越具體越好
- 限制:只修改哪些檔案、SQL 用 ? 參數、伺服器端要檢查
- 完成後:告訴我怎麼手動測試,並更新 PROJECT.md 功能進度
功能 1:記帳列表
請先讀 PROJECT.md。現在只做這一條功能:「記帳列表」。 1. 首頁 / 顯示一個月份的支出,網址參數 ?month=2026-10;沒有參數或格式錯誤時顯示本月 2. 日期新到舊;同一天的依新增順序,後新增的在前 3. 上方顯示月份、本月合計(千分位)與筆數;提供「上個月」「下個月」連結(12 月的下個月是隔年 1 月) 4. 該月沒有資料時顯示「這個月還沒有紀錄」 5. 只修改 app.py 與 templates/,SQL 用 ? 參數 完成後告訴我怎麼測試,並更新 PROJECT.md 的功能進度。
| 網址 | 正確結果 |
|---|---|
/?month=2026-10 | 合計 4,898 元、40 筆;第一筆是 10/30 午餐 139 元,第二筆 10/29 YouBike 6 元 |
/?month=2026-09 | 合計 3,946 元、40 筆 |
/?month=2025-01 | 顯示「這個月還沒有紀錄」 |
/?month=2026-13 | 不會出錯,顯示本月 |
| 在 2026-12 按「下個月」 | 變成 2027-01 |
存檔並推上 GitHub:「功能1:記帳列表」。
功能 2:記一筆
自己寫提示詞。需求:日期(預設今天)、金額、項目、類別;錯誤時回應 400、顯示中文訊息、保留已輸入的內容、不寫入資料庫;成功後回到該筆所在月份的列表。
| 輸入 | 正確結果 |
|---|---|
| 2026-10-31、100、測試、餐飲 | 回到 2026-10 列表,合計變成 4,998 元 |
| 金額 0、-5、abc、1.5、1000001 | 全部顯示「金額必須是 1 到 1,000,000 的整數」 |
| 日期 2026-02-30 | 顯示日期錯誤 |
| 項目空白、項目 31 個字 | 分別顯示必填、最多 30 個字 |
| 類別「旅遊」(用開發者工具改選項送出) | 顯示請選擇類別 |
巡堂重點
2026-02-30 被接受:AI 只用正規表示式檢查格式。要用 datetime.date.fromisoformat() 這類方法確認日期真的存在。
1.5 被當成 1:AI 用了 int(float(...))。整數規則要先檢查是不是整數字串。
測試完畢,執行 init-db 與 import-csv 讓資料回到 80 筆。
存檔並推上 GitHub:「功能2:記一筆」。
功能 3:刪除
自己寫提示詞。需求:列表每一筆有「刪除」連結;點了先到確認頁,顯示這筆的內容與「確定刪除」「取消」;只有按下確定(POST)才刪除;刪除後回到該月列表。
| 操作 | 正確結果 |
|---|---|
| 點 10/30 午餐的「刪除」 | 出現確認頁,資料還沒被刪 |
| 按「取消」 | 回到列表,合計仍是 4,898 元 |
| 再點一次並按「確定刪除」 | 合計變成 4,759 元(4,898 − 139) |
| 直接開已刪除那筆的刪除網址 | 404 |
為什麼刪除一定要用 POST:GET 是「看」,POST 是「改」。如果用一般連結(GET)就能刪除,瀏覽器的預先載入或搜尋引擎爬蟲點過去,資料就不見了。
測試完重新匯入資料,存檔並推上 GitHub:「功能3:刪除」。
功能 4:月統計
自己寫提示詞。需求:/summary?month=,各類別合計由高到低、筆數、占全月百分比(四捨五入到整數)與長條;上方顯示本月合計,並和上個月比較增加或減少多少。
| 類別(2026-10) | 金額 | 筆數 | 占比 |
|---|---|---|---|
| 餐飲 | 2,165 | 22 | 44% |
| 學習 | 1,462 | 4 | 30% |
| 娛樂 | 824 | 3 | 17% |
| 日用 | 278 | 2 | 6% |
| 交通 | 169 | 9 | 3% |
與上個月比較:9 月 3,946 元,10 月 增加 952 元。
巡堂重點
占比加起來不是 100%:四捨五入造成的,這份資料剛好是 100%,其他月份可能是 99% 或 101%,屬於正常現象,可以在頁面加註說明。
上個月沒有資料時出錯:例如看 2026-09 時,8 月是 0 元。要確認除以 0 或「沒有資料」都有處理。
存檔並推上 GitHub:「功能4:月統計」。
本週檢核
第 8 週預告:自動測試、把資料庫換成 Neon,正式上線並發表 Demo。