【Flask 教學】2023 Flask 入門指南

Flask教學 技能路線圖_Max行銷誌

什麼是 Flask?

Flask 是一種極輕量化的網頁開發框架,設計理念是 Micro,Flask 非常適合新手快速上手,簡單來說在架設 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 只需要 4 行程式,就可以輕鬆架設網頁伺服器,對於初學者來說 Flask 是一個非常友善的入門框架:

Flask 的彈性度很高,我製作了一份 Flask 學習路線圖教學,從基礎的環境建置教學、到學習 ORM 資料庫操作、以及驗證和部署,這份學習 Flask 的入門地圖,希望讓大家可以在學習 Flask 時更有方向,本篇內容會持續更新,歡迎底下留言交流或加入我們的 Flask 討論群!

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 討論群 (使用手機點擊),我們會盡快回覆您。

在〈【Flask 教學】2023 Flask 入門指南〉中有 2 則留言

  1. 作者大大您好,
    感謝你寫了這麼棒的flask教學,讓新手的我從頭到尾都能串起來相關知識。
    但是有個問題想要請教您,在第三集:實作 Docker-compose (Flask+Nginx+PostgreSQL)裡,我clone了您的source code,但docker-compose up時會出現ERROR: for template_flask Cannot start service flask: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: “uwsgi”: executable file not found in $PATH: unknown 請問您有遇過這個問題嗎?我google了好多方法都沒效… 我是mac系統

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *