py程式設計(三)課程網站
第 6 週 · 單元 3-1 · 專案一

記帳網站(一):這次六步都由你帶著 AI 走

吃貨站是老師帶著做;記帳網站只給你一份需求說明書。今天完成前三步與專案規劃,交出提案書、時程表與 PROJECT.md。

W6記帳網站定義與設計

本週結束時你會

今天的時間安排

0:00–0:15讀需求說明書;回顧吃貨站的專案回顧,挑一條「這次要改進的地方」
0:15–0:45專案規劃【自己做】提案書、時程與里程碑
0:45–1:15步驟 ①②③【自己做】使用者故事、頁面、資料表
1:15–1:25休息
1:25–2:05建立專案、匯入示範資料、對答案
2:05–2:30推上 GitHub、連結 Vercel、本週檢核

今天老師不示範程式。巡堂時只看兩件事:PROJECT.md 的使用者故事有沒有「才能…」、資料表能不能存下需求說明書的每個欄位。看到學生直接叫 AI「做一個記帳網站」,請他先回到規劃。

拿到的材料

檔案內容
需求說明書.md委託人的話、四個必要功能、規則、驗收標準
資料/expenses_範例.csv2026 年 9–10 月共 80 筆虛構支出
專案工具包:提案書、時程與里程碑本週要填的兩份規劃文件

四個必要功能:記一筆、記帳列表(月份切換)、刪除(先確認)、月統計(占比與上月比較)。不做登入、不做匯出。

專案規劃:提案書與時程

打開專案工具包的「① 提案書」。大部分內容可以從需求說明書找到,但「不做的事」和「完成的定義」要你自己判斷。

接著填「② 時程與里程碑」,把三週排好:

里程碑產出建議完成
M1 規劃完成提案書、PROJECT.md 前三段、示範資料已匯入第 6 週
M2 第一條功能記帳列表可以看、可以切換月份第 7 週前半
M3 所有功能記一筆、刪除、月統計第 7 週
M4 驗收通過自動測試全過、一位同學試用第 8 週前半
M5 上線Vercel+Neon 公開網址、Demo第 8 週

步驟 ①②③:寫 PROJECT.md

建立 程式設計三/ledger-web/,放入 PROJECT_模板.md(改名成 PROJECT.md)與課程套件。

提示詞 1 Antigravity
我要做一個記帳網站,需求說明書如下:
(貼上需求說明書全文)

請先不要寫程式。依照六步建站法的前三步,問我問題、幫我整理,最後寫進 PROJECT.md:
1. 使用者故事(3–5 條,身為…我想…才能…)
2. 頁面清單(頁面名稱、網址、內容)
3. 資料表設計(欄位、型別、必填、限制),並說明你為什麼這樣設計
技術固定為 Flask、SQLite、Jinja、Pico.css。
檢查你的資料表設計

需求說明書的每一條規則,都要能在資料表或程式中找到對應:

規則資料表可以怎麼擋
金額 1–1,000,000 整數INTEGER 加上 CHECK (amount BETWEEN 1 AND 1000000)
項目必填、最多 30 字NOT NULL 加上 CHECK (length(item) BETWEEN 1 AND 30)
類別五選一CHECK (category IN (…)),或另外建一張類別表

一張表或兩張表都可以,重點是你說得出理由。

參考版 PROJECT.md 在 practice/s3-3-1_記帳網站/參考解答/ledger-web/PROJECT.md。參考版只用一張表,因為使用者只有一人、類別固定;學生若設計成兩張表(類別獨立成表)也正確,可以請他說明好處與代價。

建立專案並匯入示範資料

提示詞 2 Antigravity
請先讀 PROJECT.md。建立 Flask 專案骨架(先不做任何頁面功能):
1. 虛擬環境 .venv、requirements.txt、.gitignore(排除 .venv、instance/、__pycache__、*.db、.env)
2. 依 PROJECT.md 的資料表寫 schema.sql,加一個指令 flask --app app init-db
3. 再加一個指令 flask --app app import-csv 檔案路徑:匯入 date,amount,item,category 格式的 CSV。每一列都要用和網頁相同的規則檢查,格式錯誤的列略過並告訴我第幾列、什麼原因
4. 首頁先只顯示「記帳網站建置中」
完成後執行 init-db 與 import-csv ../資料/expenses_範例.csv(路徑依實際位置調整),再用 SQL 告訴我 2026-10 的合計金額與筆數。

對答案

檢查正確結果
匯入結果匯入 80 筆,略過 0 筆
2026-10 合計4,898 元,40 筆
2026-09 合計3,946 元,40 筆

數字對了,用 git-save 存檔:「建立專案與匯入示範資料」。

推上 GitHub,並連結 Vercel

現在首頁只有一行字,正是第一次連結 Vercel 的好時機:出問題時,要排查的東西最少。

  1. 對 Antigravity 說:「推上 GitHub。儲存庫名稱 ledger-web,Public。」
  2. 到 Vercel →「Add New…」→「Project」→ 匯入 ledger-web。Vercel 會自動偵測到 Flask(因為根目錄有 app.py),直接按「Deploy」。
  3. 打開公開網址,看到「記帳網站建置中」就成功了。

現在線上網站只有首頁能用。不要在線上新增資料:Vercel 主機上的 SQLite 檔案是暫時的,第 8 週換成 Neon 雲端資料庫之前,寫進去的資料都會消失。

部署失敗或打開是錯誤畫面

對 Antigravity 說「準備上線到 Vercel,請做上線前檢查」(vercel-deploy-check skill),並把 Vercel 的 Deployments → Logs 錯誤訊息一起貼上。最常見的原因是 requirements.txt 少了套件,或首頁一打開就去讀還不存在的資料庫。

本週檢核