為什麼選擇 Django 作為後端框架
Goal Star 的後端選擇了 Django 搭配 Django Ninja。這篇文章分享選型的考量過程。
專案需求分析
Goal Star 後端需要處理的工作:
- 資料處理:每日從各基金網站取得交易資料,需要解析、清洗、儲存
- REST API:提供前端查詢基金、持股、交易紀錄的介面
- 排程任務:每個交易日自動更新資料
- 後台管理:偶爾需要手動檢視或修正資料
為什麼是 Django?
Python 的資料處理生態
Goal Star 需要處理大量的表格資料,Python 在這方面的生態系非常成熟。pandas 處理股票數據非常方便,從資料清洗、轉換到分析都有現成的解決方案。
雖然 Node.js 也能做到,但 Python 在資料處理的便利性上更勝一籌。
Django Ninja 建立 API
選擇 Django Ninja 而非 Django REST Framework,主要考量是:
- 型別提示優先:基於 Python type hints 和 Pydantic,API 文件自動生成
- 效能更好:相比 DRF 有更好的請求處理效能
- 語法簡潔:裝飾器風格的路由定義,學習曲線平緩
Django Ninja 的設計理念接近 FastAPI,但保留了 Django 的 ORM、Admin、生態系等優勢。
Django Admin 開箱即用
Django Admin 是一個被低估的功能。對於需要偶爾手動管理資料的專案,它省下了大量開發後台的時間。
不需要額外開發管理介面,就能檢視和修改資料庫中的記錄,對於小團隊或個人專案來說非常實用。
Celery 整合成熟
Goal Star 需要排程任務來每日更新資料。Celery 是 Python 生態系中最成熟的分散式任務佇列:
- 支援定時排程(Celery Beat)
- 任務重試機制
- 監控介面(Flower)
- 與 Django 整合良好
每個交易日晚間自動執行更新任務,失敗時自動重試並發送告警。
ORM 功能完整
Django ORM 支援複雜查詢,而且可以輕鬆產生高效的 SQL。對於 Goal Star 這種需要大量關聯查詢的應用(基金 → 持股 → 交易紀錄 → 股票),ORM 的抽象層讓開發更有效率。
實際開發體驗
文件品質優秀
Django 的官方文件是所有框架中數一數二的,從入門教學到進階主題都很完整。遇到問題時,通常能在文件中找到答案。
社群活躍
Django 已經發展超過 15 年,累積了大量的教學資源和問答。Stack Overflow 上幾乎所有常見問題都有解答。
內建安全防護
Django 內建多種安全機制:CSRF 防護、XSS 防護、SQL Injection 防護、密碼雜湊等。預設設定已包含這些基本防護,減少因疏忽而產生的漏洞。
什麼情況可能不選 Django
- 極致效能需求:如果 API 需要處理極高的併發量,可能需要考慮更輕量的框架或非同步方案
- 微服務架構:Django 比較適合單體應用,微服務可能選擇更輕量的方案
- 團隊不熟悉 Python:學習成本是實際考量
結論
Django 是一個「batteries included」的框架,對於需要快速開發、功能完整的後端應用來說,是很好的選擇。Goal Star 的需求正好符合 Django 的強項:資料處理、REST API、排程任務、後台管理。
搭配 Django Ninja 可以獲得現代化的 API 開發體驗,同時保留 Django 生態系的優勢。
有後端架構的問題想討論,歡迎聯絡我。