0%

Flask 筆記 | 基礎架構與環境準備

Flask 是一個輕量級的 Python Web 框架,特別適合學習、原型設計與中小型專案。它的設計哲學是「微框架」,提供最小的核心功能,讓開發者可以自行決定要引入哪些擴充元件,使得 Flask 具有極高的彈性與可控性。

安裝 Flask

Flask 是一個 Python 套件,可以透過常見的套件管理工具安裝。根據不同專案管理方式,可以選擇使用 pip 或 poetry。最簡單的方式是透過 pip 安裝:

1
pip install Flask

Flask 就會安裝到目前的 Python 環境中,適用於不使用虛擬環境管理器或是使用 venv 的情境。如果使用 Poetry 進行版本控制,則使用

1
poetry add Flask

建立第一個 Flask

首先在編譯器打開 app 的專案目錄,建立 app.py 這個檔案,例如:

1
2
my_flask_app/
└── app.py # Flask 主程式

接著在主程式寫入以下內容:

1
2
3
4
5
6
7
8
9
10
11
from flask import Flask  # 載入 Flask

app = Flask(__name__) # 建立 Application 物件

# 建立首頁回應方式
@app.route("/")
def index(): # 回應網站首頁連線函式
return "Hello, Flask" # 回傳網站首頁內容

# 啟動網站伺服器
app.run()

執行程式後,進入 http://127.0.0.1:5000/ 即可看到如下畫面,代表網站伺服器成功啟動。

Flask 網頁範例

圖 1:Flask 網頁範例

按下 Ctrl/⌃ + C 即可退出網站,此時再進入 http://127.0.0.1:5000/ 便不會看到任何東西。

網址

一個網址的組成可以表達為

1
通訊協定://主機名稱:埠號/路徑?查詢字串

以這個網址為例:

1
https://example.com:5000/api/user?id=123

可以分成以下幾個部分:

部分 名稱 說明
https:// 通訊協定 (protocol) 告訴瀏覽器或程式要使用哪種協定進行資料傳輸,常見的是 httphttps(安全的 http)。
example.com 主機名稱 (hostname) 網站的域名,對應到一個伺服器 IP,例如你可以在 DNS 中設定自己的主機名稱。
:5000 埠號 (port) 是伺服器上正在監聽的門口。如果省略,http 預設用 80,https 用 443;Flask 開發模式常用 5000
/api/user 路徑 (path) 表示你要請求主機上的哪個資源,Flask 會用這個部分來決定執行哪個路由函式。
?id=123 查詢字串 (query string) 傳遞給伺服器的額外資料,通常用在 GET 請求中,格式是 key=value

通訊協定

根據全球知名的網路服務公司 Cloudflare 給的定義

在網路中,通訊協定是一組用於格式化和處理資料的規則。網路通訊協定就像電腦的通用語言。網路中的電腦可能會使用完全不同的軟體和硬體;然而,使用通訊協定使它們無論如何都能彼此通訊。

簡單來說,通訊協定就像是傳輸資料的語言規則,告訴瀏覽器如何與伺服器進行對話。

協定名稱 全名 用途 特點 常見應用
TCP Transmission Control Protocol 傳輸層協定 確保資料可靠傳輸,與 IP 搭配使用(TCP/IP) 網頁、郵件、檔案傳輸
HTTP HyperText Transfer Protocol 應用層協定 無狀態、用於傳輸網頁資料 網站連線、API 呼叫
HTTPS HTTP Secure 加密版 HTTP 資料傳輸經 TLS/SSL 加密,更安全 登入、付款、個資傳輸
TLS/SSL Transport Layer Security / Secure Sockets Layer 加密協定 用於加密應用層協定如 HTTP、SMTP 等 安全通訊、網站 HTTPS
UDP User Datagram Protocol 傳輸層協定 無連線、不保證可靠、但速度快 串流影音、線上遊戲

Flask 開發模式預設就是用 http,但部署時可以透過反向代理(如 nginx)加上 SSL 轉為 https

主機名稱

也就是想要連到的伺服器名稱,對應到一個 IP 位址。

IP 位址是指派給連接至網際網路之裝置或網域的唯一識別碼。每個 IP 位址都是一系列字元,例如 192.168.1.1

層級性原則

圖 2:主機互動圖示[1]

如果在本機測試,常見的主機名稱會是:

  • localhost
  • 127.0.0.1
主機名稱 用途
localhost 本機測試 Flask
example.com 公開網站
myapp.local 開發用模擬主機,需設 DNS 或 hosts

可以這樣啟動伺服器讓它在特定主機名稱上提供服務:

1
2
flask run --host=127.0.0.1
flask run --host=0.0.0.0 # 接受所有外部 IP

連線埠與埠號

一台電腦或一個伺服器上可以同時跑很多服務(例如 HTTP、FTP、郵件),每個服務就像是一個房間,而埠號就是這些房間的房號

  • 連線埠 (port):伺服器上開的一個特定門口,專門用來收某一類的資料。
  • 埠號 (port number):門口的編號。
服務類型 協定 預設埠號
HTTP(網頁) TCP 80
HTTPS(加密網頁) TCP 443
SSH(遠端連線) TCP 22
MySQL(資料庫) TCP 3306
Flask(開發伺服器) TCP 5000(預設)

在 Flask 的 app 中可以改變埠號。只要在 app.run() 中,指定 port=埠號 即可改變既有埠號。

1
2
3
4
5
6
7
8
9
from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
return "Hello, Flask"

app.run(port=3000) # 改變埠號

另一個方法是不在程式碼中指定,而是在執行時指定:

1
flask run -p 8080