Flask入門:零基礎掌握路由與視圖函數

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會分別觸發aboutcontact函數,返回對應的內容。

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應用!

小夜