構建更強大的 Web 應用:
Flask 是一個輕量級的 Python Web 框架,以簡潔、靈活著稱,廣受開發者歡迎。然而,隨著應用的成長,單純的路由與模板功能已不敷使用。本篇將介紹 Flask 的一些進階功能與最佳實踐,幫助你打造更專業、可擴充的 Web 應用。
在大型應用中,把所有路由都寫在同一個檔案會導致維護困難。Flask 的 Blueprint 機制允許我們將應用拆分成多個模組,實現 MVC 架構。
# user/routes.py
from flask import Blueprint
user_bp = Blueprint('user', __name__)
@user_bp.route('/profile')
def profile():
return "User Profile"
然後在主應用中註冊:
# app.py
from flask import Flask
from user.routes import user_bp
app = Flask(__name__)
app.register_blueprint(user_bp, url_prefix='/user')
這樣可使專案架構清晰,也便於多人開發。
雖然 Flask 並未內建 ORM,但官方推薦使用 Flask-SQLAlchemy。它是 SQLAlchemy 的封裝,讓資料庫操作更簡潔。
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
除了基本 CRUD 操作,還支援關聯查詢、Migrations(透過 Flask-Migrate)等。
Flask-Login 是處理使用者登入、登出與 Session 綁定的利器。它支援登入保護、自動重導、登入狀態檢查等功能。
from flask_login import LoginManager
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login' # 未登入時導向的頁面
你只需實作一個 User 類別的 get_id() 方法,並設定好 user_loader,即可實現使用者認證流程。
若你的應用需提供 API,建議使用 Flask-RESTful 這個擴充套件,它能讓資源導向的 API 寫法更清晰。
from flask_restful import Resource, Api
api = Api(app)
class HelloWorld(Resource):
def get(self):
return {'hello': 'world'}
api.add_resource(HelloWorld, '/api/hello')
也可搭配 Flask-Marshmallow 實作序列化與驗證。
Flask 支援在請求之前(before_request)與請求之後(after_request)執行自定義邏輯。例如:
@app.before_request
def check_auth():
# 檢查權限、紀錄請求等
pass
同時也能全域註冊錯誤處理器:
@app.errorhandler(404)
def page_not_found(e):
return "Page Not Found", 404
Flask 的魅力不僅在於它的簡單,更在於它的可擴展性。透過 Blueprint、ORM、登入管理與 API 支援等進階功能,你可以在保有靈活性的同時,打造結構清晰、功能完善的 Web 應用。