Flask 是一個 Python 的 Web 應用框架,其原理基於 WSGI(Web Server Gateway Interface)規範。
WSGI 規範定義了 Web 應用程式和 Web 賜福器之間的標準介面,Flask 在此基礎上實現了一套 Web 應用框架。Flask 應用程式的核心是一個 WSGI 應用程式,也就是一個 Python callable(可呼叫對象),它能夠接收 HTTP 請求並回傳 HTTP 回應。
在 Flask 中,一個應用程式通常由一個或多個 Python 模組構成,每個模組都定義了一組 URL 路由規則,用戶存取這些 URL 時,Flask 會根據這些規則比對對應的 Python 函式,並將 HTTP 請求轉發給這些函式進行處理,最終回傳 HTTP 回應給客戶端。
Flask 提供了一個輕量級的應用框架,支援諸如路由、模板渲染、Session 管理、表單處理等功能。開發人員可以根據自己的需求,選擇使用 Flask 提供的功能,或者根據自己的需要擴充 Flask 應用程式。
在運行 Flask 應用程式時,需要通過一個 Web 伺服器(例如 Gunicorn、uWSGI、Apache、Nginx 等)來提供 HTTP 服務。Web 服務器接收客戶端的 HTTP 請求,然後將其轉發給 Flask 應用程式,Flask 應用程式處理完請求後回傳 HTTP 回應,Web 伺服器再將其回傳給客戶端。
Flask 的核心是 WSGI 應用程式,這是一個 Python 函式,接收兩個參數,一個是環境變數字典(environ),描述了 HTTP 請求的細節訊息,例如 HTTP 方法、URL、回應標頭等等;另一個是一個可呼叫對象,它是 WSGI 應用程式的一部分,用於處理 HTTP 請求,並回傳 HTTP 回應。這個可呼叫對象通常是 Flask 應用程式的實例。
當 Web 伺服器收到一個 HTTP 請求時,會將該請求轉發給 Flask 的 WSGI 應用程式,WSGI 應用程式,會根據環境變數中的訊息,選擇對應的規則(URL),並呼叫相應的 Python 函式進行處理。Python 函式可以進行一些業務邏輯的處理,如從資料庫中獲取內容,然後使用 Flask 提供的模板引擎將數據渲染到 HTML 模板中,最終回傳 HTTP 回應。Flask 會將 HTTP 回應轉換成符合 WSGI 規範的形式,並回傳給 Web 伺服器,Web 伺服器再將其回傳給客戶端。
Flask 提供了一個輕量級、靈活的 Web 應用框架,讓開發人員可以快速開發 Web 應用程式。Flask 的設計理念是“micro”,即最小化框架的核心代碼,並讓開發人員根據自己的需要選擇使用擴充模組來實現更多功能。Flask 擁有豐富的擴充模組庫,例如 Flask-WTF、Flask-SQLAlchemy、Flask-Login、Flask-Mail 等等,這些擴充模組可以快速實現常用的功能,從而使開發人員可以更專注於業務邏輯的開發。
Flask 還支援藍圖(Blueprint),它是一種將應用程式分解為更小、更易於管理的部分的方式。藍圖可以將路由、視圖函數、靜態文件等打包到一個單獨的模組中,使得多個應用程序可以共用同一個藍圖,從而實現代碼重用。
Flask 應用程序還支持 Middleware,Middleware 是處理 HTTP 請求和回應的一種機制。中間件可以在 HTTP 請求被處理之前、之後或過程中對其進行修改或增強。Flask 支援使用 WSGI Middleware 和 Flask Middleware,這使得開發人員可以在應用程式級別上控制 Middleware 的使用,從而提高應用程式的可重用性和可維護性。
總之,Flask 是一個輕量級、靈活的 Web 應用框架,它將 Python 函式作為視圖函式,通過 WSGI 標準將 HTTP 請求轉換為 Python 函式呼叫,再將 Python 函式回傳的回應轉換為 HTTP 回應。Flask 提供了豐富的擴充模組庫,支持藍圖和 Middleware 等功能,使得開發人員可以更快速、更靈活地開發 Web 應用程式。