路由是什麼?¶
想象一下你去餐廳喫飯:服務員不會直接帶你到廚房,而是根據你點的菜(比如“宮保雞丁”),把你引導到負責這道菜的廚師那裏。在Web開發中,路由就像餐廳的服務員,它負責接收用戶在瀏覽器輸入的網址(比如 http://example.com/home),然後找到對應的“廚師”(處理函數),讓廚師做出回應(返回網頁或數據)。
爲什麼需要路由?¶
當用戶訪問網站的不同頁面時(比如首頁、用戶中心、文章詳情頁),路由需要幫你:
1. 接收用戶的請求(比如“訪問/about”)
2. 匹配對應的處理邏輯(比如“顯示關於我們的頁面”)
3. 返回結果給用戶(比如網頁內容或JSON數據)
用Flask實現第一個路由(最基礎)¶
以最流行的輕量級框架Flask爲例,實現一個簡單的路由。
步驟1:安裝Flask¶
先確保安裝了Flask:
pip install flask
步驟2:寫一個基礎路由¶
from flask import Flask # 導入Flask類
app = Flask(__name__) # 創建Flask應用實例
# 定義路由:訪問根路徑 '/' 時,執行index函數
@app.route('/')
def index():
return "Hello, Web! 這裏是首頁~" # 返回響應內容
# 啓動應用
if __name__ == '__main__':
app.run(debug=True) # debug=True 開啓調試模式
效果:¶
運行代碼後,訪問 http://127.0.0.1:5000/,就能看到“Hello, Web! 這裏是首頁~”。
進階:帶參數的路由¶
如果需要動態獲取用戶輸入的參數(比如訪問 /user/123 獲取用戶ID),可以用 <參數名> 定義路由。
示例:獲取用戶名稱¶
@app.route('/user/<username>') # 這裏 <username> 是參數,會傳給user_profile函數
def user_profile(username):
return f"歡迎訪問用戶主頁:{username}!"
# 訪問 http://127.0.0.1:5000/user/小明 會顯示:歡迎訪問用戶主頁:小明!
進階:帶類型的參數¶
參數可以指定類型(如int、float、path),自動轉換類型:
@app.route('/post/<int:post_id>') # <int:post_id> 表示參數是整數
def show_post(post_id):
return f"查看文章ID:{post_id}"
# 訪問 http://127.0.0.1:5000/post/123 會顯示:查看文章ID:123
處理不同HTTP請求(GET/POST)¶
不同的頁面可能需要不同的請求方式(比如首頁用GET獲取內容,登錄表單用POST提交數據)。路由可以通過 methods 參數指定允許的請求方法。
示例:支持GET和POST的路由¶
from flask import request # 導入request對象獲取請求信息
@app.route('/login', methods=['GET', 'POST']) # 允許GET和POST方法
def login():
if request.method == 'POST': # 判斷請求方式
return "登錄成功!"
else:
return "請輸入賬號密碼(表單頁面)" # GET請求時顯示錶單
關鍵點:¶
GET:默認方法,用於獲取數據(比如打開網頁)POST:用於提交數據(比如表單提交、上傳文件)- 如果只允許一種方法,可省略
methods(默認只允許GET)
路由的“反向查找”(url_for)¶
有時候需要在代碼中動態生成路由URL(比如在模板中跳轉),可以用 url_for 函數。
示例:生成路由URL¶
from flask import url_for
@app.route('/')
def index():
# 生成/user/小明的URL,對應user_profile函數
user_url = url_for('user_profile', username='小明')
return f"首頁鏈接:<a href='{user_url}'>小明的主頁</a>"
@app.route('/user/<username>')
def user_profile(username):
return f"用戶主頁:{username}"
總結¶
路由是Python Web開發中連接用戶請求和處理邏輯的核心。關鍵用法:
1. 基礎路由:用 @app.route('/路徑') 定義,對應視圖函數
2. 動態參數:用 <參數名> 或 <類型:參數名> 接收用戶輸入
3. 請求方法:通過 methods 指定支持的HTTP方法
4. 反向解析:用 url_for 生成路由URL,避免硬編碼
掌握路由後,就能輕鬆實現不同頁面的跳轉和數據交互啦!