0%

Flask 筆記 | 請求方法

請求方法 (method) 是瀏覽器或前端應用程式用來向伺服器溝通的動作類型,例如:「我要拿資料」、「我要新增資料」、「我要刪掉某筆東西」。每一種方法都有它的「語意」,告訴伺服器該怎麼處理這次的請求。

常見請求方法

方法 英文全名 說明 常見用途
GET Get Resource 取得資料,不會改變伺服器的狀態 打開網頁、搜尋資料
POST Post Resource 送出資料,通常是新增或登入 表單送出、註冊
PUT Put Resource 取代整筆資料 編輯整個使用者資料
PATCH Patch Resource 修改部分資料 更新 email、密碼
DELETE Delete Resource 刪除資料 刪除留言、刪除帳戶

而前後端的互動可以參考以下流程圖:

graph TD
    A["使用者發出請求"] --> B["請求中包含請求方法與目標網址"]
    B --> C["瀏覽器送出 HTTP 請求"]
    C --> D["收到請求並比對路由與方法是否相符"]
    D --> E{"是否有對應處理函式?"}
    E -- 有 --> F["執行對應函式"]
    E -- 沒有 --> X["回傳錯誤訊息"]
    F --> G["後端從 request 讀取對應資料來源"]
    G --> H["處理業務邏輯"]
    H --> I["回傳回應"]

使用方式

Flask 預設請求方法為 GET,毋需特別設定,Flask 都會以 GET 方法處理資料。以首頁為例,打開首頁後,可以看到後端顯示成功的訊息外,還顯示了請求方法為 GET

1
2
3
* Running on http://127.0.0.1:5000
INFO:werkzeug:Press CTRL+C to quit
INFO:werkzeug:127.0.0.1 - - [29/Aug/2025 16:31:03] "GET / HTTP/1.1" 200 -
首頁畫面

圖 1:首頁畫面

延續之前計算數字平方的功能,我們將數字 20 輸入在輸入框後按下按鈕,也可以看到使用的方法為 GET

1
INFO:werkzeug:127.0.0.1 - - [29/Aug/2025 16:32:12] "GET /getSquared?number=20 HTTP/1.1" 200 -

但如果直接在前端將表單請求方法修改為 POST

1
2
3
4
<form action="/getSquared" method="POST">
數字 <input type="text" name="number">
<button>計算平方</button>
</form>

重新按下按鈕後會出現以下化

方法錯誤訊息

圖 2:方法錯誤訊息

後端同樣也會跳出 405 錯誤訊息:

1
INFO:werkzeug:127.0.0.1 - - [29/Aug/2025 16:32:44] "POST /getSquared HTTP/1.1" 405 -

原因在於後端並沒有設定是以 POST 方法處理資料因而報錯。那麼此時如果直接修改:

1
2
3
4
5
@app.route("/getSquared", methods=["POST"])
def getSquared():
number = int(request.args.get("number", ""))
result = number**2
return render_template("show.html", result=result)

這樣也會出現問題,原因在於如果使用 POST 後,取得要求字串的方法就必須用 request.form.get 而非 request.args.get

1
2
3
4
5
@app.route("/getSquared", methods=["POST"])
def getSquared():
number = int(request.form.get("number", ""))
result = number**2
return render_template("show.html", result=result)