目錄
一、為什么選擇 Flask?
二、Flask 核心概念與初始化
2.1 程序實例初始化
2.2 運行配置:app.run () 參數詳解
2.3 應用配置:三種參數設置方式
1. 字典直接配置(簡單臨時場景)
2. 配置文件導入(生產級安全)
3. 類繼承配置(復雜項目首選)
三、路由與視圖:Flask 的核心交互邏輯
3.1 基礎路由定義
3.2 路由高級特性
動態參數傳遞
路由反向解析
四、請求與響應:數據交互基礎
4.1 獲取請求數據
4.2 構建響應內容
小結
在 Python Web 開發領域,Flask 以其輕量、靈活的特性占據了重要地位。對于追求極簡開發體驗或需要高度定制化的項目來說,Flask 無疑是絕佳選擇。本文將從 Flask 的核心特性出發,詳解其基礎配置與核心概念,幫助初學者快速入門。
一、為什么選擇 Flask?
Web 開發涉及網絡通信、數據庫交互、會話管理等眾多基礎工作,直接從零開發不僅效率低下,還容易引入 bug。使用 Web 框架的核心價值在于 “避免重復造輪子”—— 框架處理底層邏輯,開發者專注業務實現。
與 Django 等 “全棧框架” 相比,Flask 的特點尤為突出:
- 輕量級:僅保留核心功能(路由、視圖、模板渲染),無強制依賴
- 高可定制:通過第三方擴展實現功能擴展(如數據庫、表單驗證等)
- 核心依賴:基于 Werkzeug(HTTP 工具集)和 Jinja2(模板引擎)構建,兼顧性能與靈活性
適合場景:小型應用、API 服務、快速原型開發,或需要深度定制架構的項目。
二、Flask 核心概念與初始化
2.1 程序實例初始化
Flask 應用的起點是創建Flask
對象,其初始化參數決定了項目的基礎結構:
from flask import Flaskapp = Flask(import_name=__name__, # 必傳,通常為__name__,決定靜態文件路徑static_url_path='/static', # 靜態文件訪問URL前綴,默認'/static'static_folder='static', # 靜態文件存儲目錄,默認'static'template_folder='templates' # 模板文件存儲目錄,默認'templates'
)
參數說明:
import_name
:用于定位項目根目錄,傳入__name__
即可滿足絕大多數場景。- 靜態文件訪問規則:默認通過
http://域名/static/文件名
訪問,修改static_url_path
或static_folder
后需對應調整路徑。
示例:若將靜態目錄改為assets
,訪問路徑需改為/static/文件名
(static_url_path
默認值),但實際文件存儲在assets
文件夾中。
2.2 運行配置:app.run () 參數詳解
創建實例后,通過app.run()
啟動服務,常用參數如下:
app.run(host="0.0.0.0", # 允許外部訪問(默認僅本地127.0.0.1)port=5000, # 端口號,默認5000debug=True # 調試模式開關
)
其中,debug=True
(調試模式)是開發階段的 “利器”,開啟后:
- 代碼修改后自動重啟服務,無需手動重啟
- 錯誤發生時,前端直接顯示詳細堆棧信息(生產環境必須關閉,避免泄露敏感信息)
2.3 應用配置:三種參數設置方式
Flask 的配置參數(如數據庫地址、密鑰等)可通過多種方式設置,適用于不同場景:
1. 字典直接配置(簡單臨時場景)
直接通過app.config
字典修改,適合快速測試:
app.config['DEBUG'] = True # 開啟調試模式
app.config['SECRET_KEY'] = 'dev_key' # 會話加密密鑰(開發環境臨時值)
2. 配置文件導入(生產級安全)
將配置寫入獨立文件(如config.py
),通過from_pyfile
導入,避免敏感信息硬編碼:
# config.py
DEBUG = False
SECRET_KEY = 'your_secure_key'
SQLALCHEMY_DATABASE_URI = 'mysql://user:pass@localhost/db'# 應用中導入
app.config.from_pyfile('config.py')
3. 類繼承配置(復雜項目首選)
通過類定義配置,支持繼承與環境區分(如開發 / 生產環境):
class BaseConfig:SECRET_KEY = 'shared_key'SQLALCHEMY_TRACK_MODIFICATIONS = Falseclass DevConfig(BaseConfig):DEBUG = TrueSQLALCHEMY_DATABASE_URI = 'mysql://root:dev_pass@localhost/dev_db'class ProdConfig(BaseConfig):DEBUG = FalseSQLALCHEMY_DATABASE_URI = 'mysql://user:prod_pass@localhost/prod_db'# 根據環境選擇配置
app.config.from_object(DevConfig) # 開發環境
# app.config.from_object(ProdConfig) # 生產環境
三、路由與視圖:Flask 的核心交互邏輯
路由與視圖是 Flask 處理用戶請求的核心機制:路由定義 URL 規則,視圖函數處理業務邏輯并返回響應。
3.1 基礎路由定義
通過@app.route
裝飾器定義路由,語法簡潔直觀:
@app.route('/') # 根路徑
def index():return 'Hello, Flask!' # 返回字符串響應
-
指定 HTTP 方法:默認僅支持
GET
,通過methods
參數擴展:@app.route('/login', methods=['GET', 'POST']) def login():if request.method == 'GET':return '登錄頁面'else:return '處理登錄請求'
-
查看項目路由:通過
flask routes
命令或代碼遍歷查看所有路由:for rule in app.url_map.iter_rules():print(f"URL: {rule.rule}, 方法: {rule.methods}, 視圖: {rule.endpoint}")
3.2 路由高級特性
動態參數傳遞
支持在 URL 中嵌入參數(如用戶 ID),并指定類型(int
/float
/string
):
@app.route('/user/<int:user_id>') # 僅匹配整數ID
def user_detail(user_id):return f"用戶ID: {user_id}" # 參數直接傳入視圖函數
路由反向解析
使用url_for
根據視圖函數名生成 URL,避免硬編碼路徑(尤其適合動態路由):
from flask import url_for, redirect@app.route('/profile')
def profile():return '個人主頁'@app.route('/redirect-to-profile')
def redirect_demo():# 反向解析profile視圖的URL(此處為'/profile')profile_url = url_for('profile')return redirect(profile_url) # 重定向到個人主頁
四、請求與響應:數據交互基礎
Flask 通過request
對象獲取客戶端數據,通過多種方式返回響應,滿足不同場景需求。
4.1 獲取請求數據
request
對象封裝了 HTTP 請求細節,需從flask
導入:
from flask import request@app.route('/submit', methods=['GET', 'POST'])
def submit():# 獲取GET參數(?name=xxx&age=18)name = request.args.get('name', '匿名') # 第二個參數為默認值# 獲取POST表單數據(Content-Type: application/x-www-form-urlencoded)if request.method == 'POST':email = request.form.get('email')# 獲取JSON數據(Content-Type: application/json)json_data = request.get_json() # 解析JSON為字典return f"Hello, {name}!"
4.2 構建響應內容
Flask 支持多種響應類型,覆蓋常見 Web 場景:
-
字符串響應:直接返回文本(默認
text/html
類型)return '簡單文本'
-
模板渲染:通過
render_template
返回 HTML 頁面(需配合templates
目錄):from flask import render_template@app.route('/page') def show_page():# 傳遞變量到模板(templates/page.html)return render_template('page.html', title='Flask頁面', content='歡迎訪問')
-
JSON 響應:通過
jsonify
返回 JSON 數據(自動設置Content-Type:application/json
):from flask import jsonify@app.route('/api/data') def api_data():return jsonify(code=200, message='success', data={'key': 'value'})
-
重定向:通過
redirect
跳轉到其他 URL:from flask import redirect return redirect('/login') # 重定向到登錄頁 return redirect(url_for('index')) # 結合反向解析更靈活
-
自定義響應:通過
make_response
設置狀態碼、響應頭:from flask import make_response@app.route('/custom') def custom_response():resp = make_response('自定義響應')resp.status_code = 201 # 狀態碼(默認200)resp.headers['X-Custom-Header'] = 'flask' # 自定義響應頭return resp
小結
本文介紹了 Flask 的核心特性、基礎配置、路由視圖與數據交互邏輯,覆蓋了搭建簡單 Web 應用的全部基礎。Flask 的設計哲學是 “簡約而不簡單”—— 看似輕量的框架,卻能通過擴展靈活支撐復雜項目。
下一篇將深入講解 Flask 的高級特性,包括會話管理、模板引擎、數據庫交互、表單處理等實戰必備技能,幫助你從 “能運行” 提升到 “能落地”。