Flask 函式庫 ( 模組 ) 是一個輕量級的 Web 應用框架,提供了包括路由 ( Routes )、樣板 ( templates ) 和權限 ( authorization) 等功能,只需要簡單的幾行程式碼,就能輕鬆架設網站或建構網路服務。
$pip install Flask
from flask import Flask
@app.route
建立路由時,預設使用「GET」方法來處理請求,但可以透過 methods
參數來指定使用 GET 或 POST 方法。
@app.route
,您可以設定特定的網址路徑,當使用者訪問這些網址時,會執行對應的函式並返回結果。以下的程式碼範例展示了如何設定三個不同的路由,每個路由對應不同的結果,當您訪問這些網址時,會看到三種不同的頁面內容。
from flask import Flask # 從 Flask 模組中載入 Flask 類別,用來建立 Flask 應用程式
app = Flask(__name__) # 建立 Flask 應用程式物件,將當前的模組名稱 (__name__) 傳遞給 Flask 類別,這樣 Flask 才能知道程式的根目錄,方便後續尋找資源和模板
@app.route("/") # 使用裝飾器為根路徑(即 "http://localhost:5000/" 或 "http://127.0.0.1:5000/")設定路由,當使用者訪問此路徑時,會調用下面定義的 home() 函式
def home(): # 定義 home 函式,這個函式會在訪問根路徑時執行
return "<h1>hello</h1>" # 返回一段 HTML 字串作為響應,這段 HTML 將顯示為一個 "hello" 標題
@app.route("/one") # 為路徑 "/one" 設定路由,當使用者訪問 "http://localhost:5000/one" 時,會調用 ok() 函式
def one(): # 定義 one 函式,這個函式會在訪問 "/one" 路徑時執行
return "<h1>one</h1>" # 返回一段 HTML 字串作為響應,這段 HTML 將顯示為一個 "one" 標題
@app.route("/two") # 為路徑 "/two" 設定路由,當使用者訪問 "http://localhost:5000/two" 時,會調用 yes() 函式
def two(): # 定義 two 函式,這個函式會在訪問 "/two" 路徑時執行
return "<h1>two</h1>" # 返回一段 HTML 字串作為響應,這段 HTML 將顯示為一個 "two" 標題
app.run() # 執行
使用 app.run
執行時,可以透過設定 port
參數來指定埠號,或者將 host
設定為 0.0.0.0
,這樣 Flask 會使用本機的實際 IP 作為網址。以下的程式碼執行後,將會生成類似 192.168.XXX.XXX:8080
的網址。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "<h1>hello world</h1>"
app.run(host="0.0.0.0", port=8080)
除了固定的導向位址,URL 也可以成為函式接收的參數
from flask import Flask
app = Flask(__name__)
@app.route('/<name>', methods=['GET']) # 訪問 : http://127.0.0.1:5000/HIHIHI
def Name(name):
print("type(name) : ", type(name)) # 打印 : type(name) : <class 'str'>
return 'String => {}'.format(name) # 網頁 : String => HIHIHI
app.run()
透過 Flask 建立的網頁服務,不僅可以在網頁上顯示特定的文字,還可以使用 render_template
方法來呈現網頁模板。只要在程式中載入這個方法,就能顯示位於「同一層的 templates
資料夾」中的網頁模板。以下是一個基本的網頁模板,它能讀取並顯示傳入的 name
參數的內容。
<!DOCTYPE html>
<html>
<head>
<title>TRY</title>
</head>
<body>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello, World!</h1>
{% endif %}
</body>
</html>
網頁樣板完成後,執行下方的程式,只要網址具有 name 的參數,就會透過網頁樣板顯示在網頁中。
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/')
def home():
# 當使用者以 GET 方法訪問該路徑時,request.args 會將 URL 中的參數以 tuple 格式讀取
# 使用 get() 方法獲取 'name' 參數的值,如果參數不存在則返回 None
name = request.args.get('name')
# 將 name 參數傳遞給模板以供顯示
return render_template('try.html', name=name)
app.run() # 啟動 Flask 應用程式,預設會在本機的 http://127.0.0.1:5000/ 運行
my_flask_app/
├── app/
│ ├── static/ # 靜態文件夾,包含 CSS、JavaScript 和圖像等靜態資源
│ │ ├── css/
│ │ ├── js/
│ │ └── images/
│ └── templates/ # 模板文件夾,包含 HTML 模板
│ ├── layout.html
│ ├── home.html
│ └── about.html
└── main.py
參考資料 :
https://steam.oxxostudio.tw/category/python/example/flask.html
https://ithelp.ithome.com.tw/articles/10258223?sc=pt