Flask輕量級Web框架:核心概念與基礎應用

一、什麼是Flask?

Web框架就像是建築中的“預製構件”,能幫我們快速搭建網頁應用,不用從零開始寫所有代碼。Flask是一個用Python編寫的輕量級Web框架,它的設計理念是“微”(Micro)——輕量、靈活,只提供最核心的功能,其他複雜功能可以通過擴展(Extensions)實現。

簡單來說,Flask就像一個空的房子框架,你可以根據需要添加牆壁(路由)、門窗(功能),但基礎結構已經幫你搭好了,讓你專注於寫網頁的業務邏輯。

二、爲什麼選擇Flask?

  • 輕量靈活:沒有太多內置功能,你可以自由選擇需要的組件,比如想寫博客就加個ORM,想做用戶認證就加個登錄插件。
  • 學習成本低:核心概念簡單,語法簡潔,適合新手入門Web開發。
  • 擴展性強:雖然輕量,但有豐富的第三方擴展(如Flask-SQLAlchemy、Flask-Login等),能滿足複雜項目需求。
  • 文檔友好:官方文檔清晰易懂,社區活躍,遇到問題容易找到解決方案。

三、核心概念詳解

1. 路由(Route):URL與函數的橋樑

路由就像地圖上的路標,告訴Flask“哪個URL對應哪個功能”。用裝飾器@app.route()定義:

@app.route('/')  # 定義根目錄URL
def index():     # 視圖函數,處理URL請求
    return "Hello, Flask!"  # 返回頁面內容
  • 裝飾器:Python的裝飾器是“語法糖”,給函數加上@app.route('/')後,Flask會知道這個函數要處理根路徑/的請求。
  • 路由變量:可以動態捕獲URL參數,比如用戶頁面:
  @app.route('/user/<username>')  # <username>是動態參數
  def user_profile(username):
      return f"Hello, {username}!"  # 直接用參數拼接內容

2. 視圖函數(View Function):處理請求的核心

視圖函數是路由指向的“處理函數”,負責接收請求、處理數據、返回響應。比如:

@app.route('/greet')
def greet():
    name = "Flask"
    return f"<h1>Hello, {name}!</h1>"  # 返回HTML內容
  • 返回內容:可以直接返回字符串(含HTML標籤)、JSON(用jsonify())或渲染模板(用render_template())。

3. 請求與響應(Request & Response)

  • 請求對象(Request):從客戶端(瀏覽器)獲取數據,比如用戶輸入的表單、URL參數等。需要導入request
  from flask import request

  @app.route('/search', methods=['GET', 'POST'])
  def search():
      if request.method == 'POST':  # 判斷請求類型(GET/POST)
          keyword = request.form.get('keyword')  # 獲取表單數據
          return f"搜索關鍵詞:{keyword}"
      else:  # GET請求
          return "請輸入關鍵詞"
  • 響應對象(Response):給客戶端返回數據,最簡單的是用return,還可以自定義狀態碼:
  return "Not Found", 404  # 返回404錯誤

4. 模板(Templates):動態生成頁面

直接返回HTML字符串不靈活,模板引擎(Flask默認用Jinja2)能幫我們更高效地渲染頁面。步驟:
1. 在項目根目錄創建templates文件夾(必須命名爲templates)。
2. 在templates裏新建index.html

   <!DOCTYPE html>
   <html>
   <body>
       <h1>Hello, {{ name }}!</h1>  <!-- Jinja2變量渲染 -->
       {% if age > 18 %}
           <p>成年人</p>
       {% else %}
           <p>未成年人</p>
       {% endif %}
   </body>
   </html>
  1. 在視圖函數中渲染模板:
   from flask import render_template

   @app.route('/template')
   def use_template():
       data = {
           "name": "Flask",
           "age": 20
       }
       return render_template('index.html', **data)  # 傳遞數據給模板

5. 靜態文件(Static Files):CSS、JS、圖片等

靜態文件(如樣式表、圖片、JavaScript)放在項目根目錄的static文件夾中。通過url_for('static', filename='xxx')引用:

<!-- 在模板中引用CSS -->
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">

<!-- 引用圖片 -->
<img src="{{ url_for('static', filename='logo.png') }}">

6. 擴展(Extensions):讓功能更強大

Flask本身功能簡單,但擴展能幫你快速實現複雜需求,比如:
- Flask-SQLAlchemy:操作數據庫的ORM工具,不用寫原生SQL。
- Flask-Login:實現用戶登錄、註銷、會話管理。
- Flask-WTF:處理表單驗證(防重複提交、數據校驗)。

四、基礎應用實戰:從0到1寫一個簡單網站

1. 最小示例:第一個Flask應用

創建一個app.py文件(項目根目錄):

from flask import Flask

# 初始化Flask應用,__name__是當前模塊名
app = Flask(__name__)

# 定義路由和視圖函數
@app.route('/')
def home():
    return "歡迎來到Flask小站!<a href='/about'>關於我們</a>"

@app.route('/about')
def about():
    return "這是一個用Flask寫的簡單示例網站。"

# 啓動應用(僅在直接運行時生效)
if __name__ == '__main__':
    app.run(debug=True, port=5000)  # debug=True:代碼修改自動重啓

運行方式:在終端執行python app.py,打開瀏覽器訪問http://localhost:5000,就能看到“歡迎來到Flask小站!”頁面。

2. 擴展功能:添加模板和靜態文件

(1)創建項目結構

my_flask_app/
├── app.py          # 主程序
├── templates/      # 模板文件夾
│   └── index.html  # 首頁模板
└── static/         # 靜態文件文件夾
    └── style.css   # 樣式表

(2)修改index.html模板:

<!DOCTYPE html>
<html>
<head>
    <title>Flask小站</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
    <h1>Hello, Flask!</h1>
    <p class="intro">這是一個輕量級Web框架的示例。</p>
    <a href="/about">關於我們</a>
</body>
</html>

(3)修改style.css

body {
    font-family: Arial;
    max-width: 800px;
    margin: 0 auto;
    padding: 20px;
}
.intro {
    color: #666;
}

(4)修改app.py

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html')  # 渲染templates/index.html

@app.route('/about')
def about():
    return render_template('about.html')  # 假設about.html也在templates裏

if __name__ == '__main__':
    app.run(debug=True)

現在重新運行app.py,就能看到帶樣式的頁面和超鏈接跳轉了!

五、總結與學習建議

Flask的核心優勢是“輕量+靈活”,適合從小項目起步,再逐步擴展功能。初學者可以先掌握基礎的路由、視圖、模板和靜態文件,再學習擴展工具(如ORM、用戶認證)。

學習資源推薦
- 官方文檔:flask.palletsprojects.com
- 入門教程:跟着官方的“快速入門”(Quickstart)寫示例,邊做邊學
- 實踐項目參考:嘗試用Flask做一個簡單博客、待辦事項列表等

通過這篇文章,你已經瞭解了Flask的核心概念和基礎應用。接下來,動手嘗試修改示例代碼,比如添加表單提交、用戶參數動態渲染,就能更快掌握Web開發的基礎技能啦!

小夜