Flask 表單、驗證與錯誤處理:網站不能只會送出資料
很多人做第一個 Flask 網站時,會先把重點放在「表單能不能送出去」。這當然很重要,但一個真正能用的網站,不只是可以送出資料而已,還要能檢查資料、處理錯誤、給使用者清楚回饋。也就是說,表單、驗證與錯誤處理其實是一組要一起看的事情。 先講表單。表單的作用是把使用者輸入的資料送進後端,例如標題、作者、內容、留言、帳號密碼。你可以透過 req...
很多人做第一個 Flask 網站時,會先把重點放在「表單能不能送出去」。這當然很重要,但一個真正能用的網站,不只是可以送出資料而已,還要能檢查資料、處理錯誤、給使用者清楚回饋。也就是說,表單、驗證與錯誤處理其實是一組要一起看的事情。
先講表單。表單的作用是把使用者輸入的資料送進後端,例如標題、作者、內容、留言、帳號密碼。你可以透過 `request.form.get()` 取值,再決定要不要寫進資料庫。這是 Flask 最基本也最重要的一條資料流。
但如果你只寫了「送出就存」,通常很快就會出現問題。像是欄位是空的、字串太短、格式錯誤、使用者重複送出、甚至根本沒填必要資料。這時候驗證就很重要。
最基本的驗證通常包括:
欄位是否為空
字數是否合理
格式是否正確
資料是否重複例如你新增文章時,至少要確認標題、作者、內容都不是空值。若有錯誤,就不應該直接寫進資料庫,而是回到表單頁並提示使用者問題在哪裡。
接著是錯誤處理。這一點很多新手容易忽略,因為在開發階段只要出錯,Flask 通常會直接把錯誤頁噴出來。但正式網站不能這樣。對使用者來說,他只需要知道是「找不到頁面」、「資料送出失敗」或「系統稍後再試」,不需要看到你的 traceback。
比較常見的錯誤至少有幾種。像是 404,代表網址不存在;500,代表伺服器端程式發生錯誤;表單驗證失敗,則屬於使用者輸入不完整或不符合規則。這三種情況在畫面上應該有不同處理方式。
如果你把這些事情做好,網站體驗會差很多。因為對使用者來說,網站不是只有「成功」和「失敗」,而是他出錯時有沒有被好好引導。對開發者來說,這也會讓程式更穩,不會因為輸入稍微不正常就整頁炸掉。
所以當你做 Flask 網站時,建議不要只把表單當成資料入口,而是把它當成整個網站可靠性的第一道關卡。能不能驗證、能不能提示、能不能在出錯時維持基本體驗,這些都會直接影響網站是不是像一個真正可用的產品。