Skip to content

hsuanchi/flask-template

Repository files navigation

Why Flask?

Python 的 web 框架很多,推薦選擇 Flask 開始入門,因為 Flask 是一種極輕量化的框架,設計理念是 Micro,非常適合新手快速上手,簡單來說在架設 Flask 時就像是堆積木,可以自己決定要使用什麼積木 (擴充套件),不會有多餘的積木,達到簡單、輕量、高擴充性的架構。

The “micro” in microframework means Flask aims to keep the core simple but extensible. Flask won’t make many decisions for you, such as what database to use. Those decisions that it does make, such as what templating engine to use, are easy to change. Everything else is up to you, so that Flask can be everything you need and nothing you don’t. Flask document #what-does-micro-mean

也因為 Flask 的彈性度很高,所以製作了一份 Flask 學習路線圖教學,從基礎的環境建置教學、到學習 ORM 資料庫操作、以及驗證和部署,是一份學習 Flask 的入門地圖,讓大家可以輕鬆學習 Flask,而本篇內容會持續更新,歡迎底下留言交流!

一. Flask 入門篇

介紹當初入門學習 Flask 時忽略的幾個重點,此篇從 Flask 設計理念、Flask 運行的三種方法、到運行後終端機顯示的小細節,建議不管是 Flask 初心者或老司機都可以閱讀一下,說不定會有意外的發現。

Nice To Have:
當 Flask 架構越來越龐大,專案架構該怎麼切?如何避免遇到 Circular Imports 問題?以下第一篇介紹了 Flask 常見的兩種專案架構結構、Flask Blueprints 用法;而第二篇則是利用工廠模式來快速切換環境配置 。兩篇都是作者在官方文件中推薦的 Flask 實作方法,建議可以加入自己的 Flask 架構中:

二. Flask 資料庫串接篇

資料庫操作上,我們使用 Flask-SQLAlchemy 套件,為什麼選擇 Flask-SQLAlchemy?

  1. 可支援市面上常用的資料庫 sqlite、Mysql、PostgreSQL、MSSql、Oracle
  2. 可以使用原生 SQL下指令,也同時支援 ORM 框架來操作資料庫,可以隨時切換很方便。 關於 Flask-SQLAlchemy 相關教學,可以參考:

Nice To Have:
關於 raw sql 指令,也推薦以下此篇,將會使用 子查詢 Subquery通用表達式 Common Table Expressions窗函式 Window Function ,來實戰電商的用戶留存、用戶活躍度 ( MAU/ WAU / DAU )、客戶分群 – RFM / NES 模型、分類貼標籤 … 等。

三. Flask 使用者驗證 Http authentication 篇

當前端發請求 Http request 給後端時,該如何驗證使用者是否對此路徑 (route) 有權限能夠請求?實作了兩種方法,分別是使用 Session 的方式,和使用 JWT token 方式來驗證使用者請求!

1.Session-based Authentication

2.Token-based Authentication

驗證完使用者請求後,Http request 的來源又是否安全呢?以下兩篇從同源政策開始解說,到使用 flask-cors 套件來設定 CORS 允許非同源的請求,最後介紹實作 CSRF token 和 Cookie Samesite 設定來避免受到 CSRF 攻擊,確保非同源的請求是安全的!

四. Flask 部署篇

Flask run 之後,發生了什麼事?Flask 自帶的 Web Server 只適合測試環境使用,那正式環境怎麼辦?來來來,先了解一下什麼 WSGI、uWSGI 和 Nginx,他們與 Flask 之間的愛恨情仇到底是什麼!

想更了解 Nginx 和 uWSGI 還有什麼進階配置嗎?那就快來看看以下兩篇配置教學文章

了解 WSGI、uWSGI 和 Nginx 關係之後直接實際在 GCP 上部署一個 Flask + Nginx +uWSGI Server 吧!

五. Flask 遇上 Docker 篇

每次部署 Flask Server 環境設定都好麻煩?Flask 遇上 Docker 系列會實作如何使用 Docker 部署 Flask,並且都有附上完整程式碼在 GitHub 上唷!

六. Flask Cache 篇

部署後,在網頁瀏覽時載入好慢?試試利用快取來優化吧,本篇實作 Server Side 和 Client Side 的 Cache 機制:

七. Flask Testing 測試篇

部署後 Server 總是出問題?快來試試單元測試吧!本篇除了實作 Flask 單元測試和程式的覆蓋率外,也介紹了單元測試的 F.I.R.S.T 原則,以及考量 Independent 時,會遵循 3A rule。

八. Flask CI / CD 篇

測試、部署好累?交給電腦處理吧!建立 CI / CD 的工具很多,像是 CircleCI、 TravisCI、 Jenkins、Drone CI,本篇要實作的是 GitHub 在 2019 年推出的 Action 來實作 Flask + Action 建置 CI / CD

九. 第三方 API 串接篇

十. 多國語系

開始實作前,請思考多國語系的「網址結構設計」要怎麼決定?「Hreflang」 和 「Canonical」的 SEO 標籤是什麼,要怎麼埋設?此外這篇還會分享一些國外在做多國語系上的小巧思案例分享:

實作 Flask-Babel 來建置 i18n 的多國語系網站,並且有附 GitHub 完整的範例,歡迎大家 clone 使用:

十一. 版本控制

雖然版本控制和 Flask 沒有特別關聯,但隨著專案架構越來越大、或需要與同事協作時、或是在建置 CI / CD 的 Repo 存放,版本控制都是很重要的一環,建議這塊技能可以越早點越好。

其他 Flask 相關學習資源

以下是我過去在學習 Flask 時,時常拜訪和受益留多的 Flask 教學網站,提供給大家參考:

最後. Keep Learning

關於任何關於 Flask 問題都很歡迎私訊或留言,也歡迎加入 Flask Taiwan 社團 ,或是加入 Flask Taiwan Line 討論群 (需使用手機點擊),我們會盡快回覆您