路由是什麼?

想象一下你去餐廳喫飯:服務員不會直接帶你到廚房,而是根據你點的菜(比如“宮保雞丁”),把你引導到負責這道菜的廚師那裏。在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,避免硬編碼

掌握路由後,就能輕鬆實現不同頁面的跳轉和數據交互啦!

小夜