iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0
生成式 AI

30天製作生成式AI的互動網頁專案系列 第 27

Day-27 Flask 進階介紹

  • 分享至 

  • xImage
  •  

構建更強大的 Web 應用:
Flask 是一個輕量級的 Python Web 框架,以簡潔、靈活著稱,廣受開發者歡迎。然而,隨著應用的成長,單純的路由與模板功能已不敷使用。本篇將介紹 Flask 的一些進階功能與最佳實踐,幫助你打造更專業、可擴充的 Web 應用。

  1. 藍圖(Blueprint):模組化應用架構

在大型應用中,把所有路由都寫在同一個檔案會導致維護困難。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')

這樣可使專案架構清晰,也便於多人開發。

  1. 資料庫整合:Flask-SQLAlchemy

雖然 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)等。

  1. 使用 Flask-Login 管理使用者登入狀態

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,即可實現使用者認證流程。

  1. RESTful API 與 Flask-RESTful

若你的應用需提供 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 實作序列化與驗證。

  1. 中介層與錯誤處理

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


上一篇
Day-26 生成式AI的未來趨勢與展望
下一篇
Day-28 生成式AI面臨的法律與安全問題
系列文
30天製作生成式AI的互動網頁專案29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言