上次我們講了 Flask 的 Route,知道可以透過
@app.route()
設定不同的 Path,讓 Request(請求)來到不同的 Path 時,執行不同的程式。
像上一篇寫的:
@app.route('/tasks')
def tasks():
return "My Tasks"
如果請求來到 /tasks,就執行下面程式,然後回傳 My Tasks
我們現在範例的回傳都只是一段文字。
如果今天要做一個作業 API,我們想要回傳作業的資料,可能會希望長這樣:
作業名稱:Flask
是否完成:否
這時候就不能只回傳一句 My Tasks 了,而是需要把資料整理好再傳出去。
而在 Web API 中,很常使用的一種資料格式就是 JSON。
JSON = JavaScript Object Notation。
它是一種常用來交換資料的格式。
名字裡雖然有 JavaScript,但現在幾乎每種語言都支援它,所以並不是 JavaScript 專用的。
例如一筆作業資料可以寫成:
{
"name": "Flask",
"completed": false
}
可以像這樣,用「名稱和值」的方式把資料整理起來,讓資料更有結構一點,也方便知道每個資料代表什麼
像是這段就在說
name → 作業名稱
completed → 是否完成
JSON 看起來和 Python 的字典很像,但它們不是同一個東西。
幾個常見的差別:
Python 的 True / False → JSON 是 true / false(小寫)
Python 的 None → JSON 是 null
JSON 的名稱和文字一定要用雙引號 ” ,不能用單引號 ’
我們繼續沿用上一篇程式
把 tasks() 的回傳值修改成 Python 的字典:
@app.route('/tasks')
def tasks():
return {
"name": "Flask",
"completed": False
}
儲存程式
並打開 http://127.0.0.1:5000/tasks
當 Request 來到 /tasks 時,Flask 會找到 /tasks 對應的 Route,執行 tasks()。
而這次 tasks() 回傳的不是 “My Tasks”,而是一個 Python 字典。
Flask 收到這個字典後,會自動把它轉成 JSON 格式,放進 HTTP Response,再回傳給瀏覽器。
Request 來到 /tasks
↓
Flask 找到 /tasks 對應的 Route
↓
執行 tasks()
↓
return Python 字典
↓
Flask 轉成 JSON
↓
放進 HTTP Response
↓
回傳給瀏覽器
回傳的資料:
瀏覽器打開 http://127.0.0.1:5000/tasks 看到 JSON 的畫面
這裡可以注意一個地方:
我們在 Python 裡寫的是 False,但瀏覽器上顯示的是 false。
因為 Flask 已經把 Python 字典轉成 JSON 了,這就是剛剛說的那個差別。
光看畫面,其實不太容易確定它跟一般的文字有什麼不同。
有兩個方式可以確認。
第一個是在瀏覽器按 F12 打開開發者工具,切到 Network,重新整理頁面,再點一下 tasks 這筆請求,
在 Response Headers 裡面就會看到。
第二個更直接,在終端機下:
curl.exe -i http://127.0.0.1:5000/tasks
i 的意思是「連 Header 一起印出來」。
會看到:
重點是中間這一行:
Content-Type: application/json
用 curl -i 看 Response,Content-Type 是 application/json
Day 3 有提到,Response 是後端回傳的結果。
這裡就可以實際看到,Flask 除了把資料傳回來之外,也在 Response 裡標示了「我這次回傳的是 JSON」,
前端收到之後才知道要用什麼方式處理這包資料。
(如果回傳的是 “My Tasks” 這種字串,這裡會變成 text/html。)
除了字典之外,也可以直接回傳 List:
@app.route('/tasks')
def tasks():
return [
{"name": "Flask", "completed": False},
{"name": "JSON", "completed": True},
]
Flask 一樣會幫我們轉成 JSON,只是這次變成一個陣列。

回傳 List 時,瀏覽器看到的 JSON 陣列
(回傳 List 是 Flask 2.2 之後才支援的,如果看到比較舊的教學說不行,是版本的關係。)
也就是說,我們在 Python 裡寫的是 Python 字典,Flask 會幫我們轉成 JSON,再透過前面學過的 Response 把資料傳出去。
今天我們不再只讓 Flask 回傳一句簡單的文字,而是開始讓它回傳比較有結構的資料。
我們先在 Python 中使用字典整理資料,再交給 Flask 轉成 JSON,最後透過 HTTP Response 回傳。
這也把前面學過的 Request 和 Response 實際串進 Flask:
Request 進來 → Flask 處理 → Response 回去
現在我們已經知道 Flask 可以怎麼回傳資料了。
不過接下來如果要開始建立更多 API,還有沒有其他工具可以讓我們寫 API 更方便呢?
下一篇就來看看 Flask 開發 API 時有哪些常見的套件。