Flask是一個輕量級的Python Web框架,以其簡潔靈活的特點深受開發者喜愛。對於零基礎的初學者來說,掌握路由與視圖函數是學習Flask的第一步。本文將帶你從安裝Flask開始,逐步理解路由的定義、視圖函數的作用,以及它們如何協同工作。
一、安裝Flask¶
要開始使用Flask,首先需要安裝它。確保你的電腦已安裝Python(推薦3.6及以上版本),然後打開命令行工具,執行以下命令:
pip install flask
安裝完成後,可以通過在Python終端執行import flask來驗證是否安裝成功(無報錯即表示安裝成功)。
二、第一個Flask應用:“Hello, Flask!”¶
讓我們從最簡單的示例開始,創建一個能返回“Hello, Flask!”的Web應用。新建一個Python文件(例如app.py),並輸入以下代碼:
# 導入Flask類
from flask import Flask
# 創建Flask應用實例,__name__是當前模塊名,Flask會根據這個找到資源路徑
app = Flask(__name__)
# 定義路由和視圖函數
@app.route('/') # 裝飾器:將URL路徑'/'與下面的函數綁定
def index(): # 視圖函數:處理用戶請求的函數
return "Hello, Flask!" # 返回響應內容
# 啓動開發服務器
if __name__ == '__main__':
app.run(debug=True) # debug=True:開啓調試模式,代碼修改後自動重啓
運行這段代碼:
python app.py
此時,Flask會啓動一個本地開發服務器,默認地址是http://127.0.0.1:5000/。打開瀏覽器訪問這個地址,你會看到頁面顯示“Hello, Flask!”。
三、路由:URL與函數的映射¶
路由是Flask中最重要的概念之一,它定義了用戶請求的URL路徑與處理該請求的視圖函數之間的對應關係。可以理解爲:“當用戶訪問某個URL時,Flask會自動調用對應的視圖函數,並將函數返回的內容作爲響應。”
1. 靜態路由:固定路徑¶
上面的示例中,@app.route('/')將根路徑/映射到index函數。除了根路徑,我們還可以定義其他固定路徑,例如:
@app.route('/about') # 訪問 http://127.0.0.1:5000/about
def about():
return "關於我們的頁面"
@app.route('/contact') # 訪問 http://127.0.0.1:5000/contact
def contact():
return "聯繫我們的頁面"
此時,訪問/about和/contact會分別觸發about和contact函數,返回對應的內容。
2. 動態路由:帶參數的路徑¶
如果需要處理“變量路徑”(例如訪問不同用戶的個人頁面,如/user/Alice、/user/Bob),可以在路由中使用動態參數。語法是:<參數名>,並在視圖函數中接收該參數。
@app.route('/user/<username>') # <username>是動態參數,可匹配任意字符串
def user_profile(username):
return f"歡迎訪問 {username} 的個人主頁!"
此時,當用戶訪問http://127.0.0.1:5000/user/Alice時,username參數會被賦值爲"Alice",視圖函數返回"歡迎訪問 Alice 的個人主頁!"。
注意:動態參數的類型可以顯式指定(如整數、浮點數),例如:
@app.route('/post/<int:post_id>') # 僅匹配整數類型的post_id
def show_post(post_id):
return f"顯示文章ID:{post_id}"
此時訪問/post/123會返回文章ID 123,而訪問/post/abc(非整數)會返回404錯誤(找不到路由)。
四、視圖函數:處理請求與返回響應¶
視圖函數是路由的“執行者”,它接收用戶請求(如URL參數、表單數據等),處理後返回響應內容(網頁、JSON、重定向等)。
1. 返回字符串或HTML¶
視圖函數最基礎的返回值是字符串。可以直接返回文本,也可以返回HTML內容:
@app.route('/')
def index():
# 返回純文本
return "Hello, 文本!"
# 返回HTML內容(Flask會自動渲染HTML標籤)
return "<h1>Hello, <em>HTML</em>!</h1>"
2. 處理HTTP方法¶
默認情況下,@app.route只接受GET請求(用於獲取數據)。如果需要處理POST請求(用於提交數據,如表單),需在裝飾器中顯式指定methods參數:
@app.route('/login', methods=['GET', 'POST']) # 允許GET和POST方法
def login():
if request.method == 'POST': # 判斷請求方法
# 處理表單提交邏輯(需導入request)
username = request.form.get('username')
return f"登錄成功:{username}"
else:
# 顯示登錄表單(返回HTML表單)
return '''
<form method="post">
用戶名:<input type="text" name="username">
<button type="submit">登錄</button>
</form>
'''
注意:使用request對象需先導入:from flask import request。
3. 返回JSON數據¶
如果需要返回JSON格式的數據(如API接口),可以直接返回字典,Flask會自動轉換爲JSON並設置正確的響應頭:
from flask import jsonify
@app.route('/api/data')
def api_data():
data = {
"name": "Flask",
"version": "2.0",
"features": ["輕量", "靈活", "易擴展"]
}
return jsonify(data) # 返回JSON格式響應
五、啓動與調試¶
在開發階段,使用app.run()啓動Flask服務器。爲了方便調試,建議開啓debug=True(生產環境需關閉,避免安全風險):
if __name__ == '__main__':
app.run(debug=True) # 開啓調試模式,代碼修改後自動重啓
此時,服務器會運行在本地http://127.0.0.1:5000/(端口5000,可通過port=8080修改)。
六、總結¶
路由與視圖函數是Flask的核心基礎,掌握它們你就能構建最簡單的Web應用:
1. 路由通過@app.route定義URL與函數的映射關係;
2. 動態路由用<參數名>處理變量路徑,視圖函數接收參數;
3. 視圖函數處理請求(獲取數據、表單提交)並返回響應(文本、HTML、JSON等);
4. 需注意HTTP方法(GET/POST)的支持,通過methods參數指定。
練習建議:嘗試創建一個包含“首頁、用戶頁、登錄頁”的小項目,練習不同路由和視圖函數的組合。
通過本文,你已初步掌握了Flask的路由與視圖函數。接下來可以學習模板(渲染HTML文件)、靜態文件(CSS/JS)等進階內容,逐步構建更復雜的Web應用!