關於 Flask Web 開發的個人小結

MirrorTan發表於2019-06-01

在閱讀完 Miguel Grinberg 的 Flask Web Development: Developing Web Application with Python 並按照書中的案例進行了一遍實操,對 Miguel Grinberg 的 flasky 以及 Grey Li 的 bluelog 簡單改寫後做了一個自己的 Flask 網站,現對 Flask Web 做一個簡單的個人小結。

簡介

Flask 是一個輕量級的 Python web 框架,其採用 jinjia2 作為模板引擎,採用 Werkzeug 作為 WSGI (Web Server Gateway Interface) 工具箱。它採用 extensions 的模式來豐富其功能,讓使用者可以依照自己的需要選擇——甚至可以自己開發第三方外掛。

從搭建部落格的角度說起

要構建一個個人部落格——也就是比較簡單的個人主頁,我們需要三樣東西:一臺常年執行的伺服器,一個供使用者訪問的地址 URL ,提供內容的 WEB 程式。

前兩樣東西一般通過購買獲得(當然第三樣也可以購買或者使用別人搭建好的開源程式),WEB 程式書寫則是我們現在的目標。我們知道,呈現給使用者(客戶端)的內容是 HTML+CSS+JavaScript 的組合,而 Flask 則是幫助我們在後臺控制使用者訪問的工具。

Flask 作為一個輕量級的 Python WEB 框架,其核心只提供了最簡單的功能,包括:

  1. 路由 route :通過裝飾器將 URL 與檢視函式繫結;
  2. 除錯 debug :反饋程式中的錯誤並指出問題的程式碼;
  3. Web 伺服器閘道器介面 WSGI :一種呼叫約定,用於 Web 伺服器將請求轉發到程式中;
  4. 模板引擎 jinja2 :對模板進行渲染。

其中,路由、除錯和 WSGI 子系統均由 Werkzeug 提供。

至此,我們已經可以寫出最簡單的 Flask 程式:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return "hello world"

if __name__ == "__main__":
    app.run()

但對於一個完整的部落格而言,這樣簡單的功能顯然難以滿足我們的需求,幸好,我們可以藉助於 Flask 豐富的第三方擴充完善網頁的功能。

  1. Flask-WTF: Web 表單的處理;
  2. Flask-SQLAlchemy: 資料庫操作與訪問;
  3. Flask-Mail: 電子郵件支援;
  4. Flask-Login: 使用者認證管理;
  5. Flask-Markdown: 為部落格提供 Markdown 相關支援;
  6. Flask-WhooshAlchemy: 使用 Whoosh 實現 Flask-SQLAlchemy 模型的全文檢索;
  7. Flask-Sitemap: 用於生成網頁站點圖;

更多有關 Flask 第三方庫的推薦可參考 Awesome Flask:https://github.com/humiaozuzu/awesome-flas....

一些套路

虛擬環境

一般而言,使用 Python 做一些專案時,都會為該專案建立單獨的虛擬環境,以避免包的混亂及版本的衝突,保持全域性 Python 直譯器的乾淨整潔的同時,更加便於使用(在虛擬環境中,不需要管理員許可權)。

建立虛擬環境的 Python 包可以用 virtualenv, pyvenv, pipenv 等,以 virtualenv 為例建立專案所需的環境:

$ mkdir projectname
$ cd projectname

# 建立名為 venv 的虛擬環境(名稱無強制要求)
$ virtualenv venv

# 啟用虛擬環境
$ source venv/bin/activate
# Windows 環境下被啟用
$ venv\Scripts\activate

# 安裝 Flask
(venv) $ pip install flask

# 退出環境
$ deactivate

在 Windows 系統中的命令和類 UNIX 系統中不一致,\ / 之間的區別常讓人頭大, cmder (可以在 Windows 系統中使用常用的 bash 命令)可以幫你解決大部分問題。

執行引數

假定你需要執行的 flask 程式為 manage.py,在測試環境中的執行命令為:

(venv) $ python manage.py runserver

一些常用的可選引數:

  • -h, --help: 顯示幫助資訊並退出。
  • -t HOST, --t HOST: 允許訪問的 IP 地址,預設情況下只允許本地主機通過 http://127.0.0.1:5000/ 進行訪問;通過新增引數 --host 0.0.0.0 ,任意計算機可通過本地主機外網 IP 地址的 5000 埠訪問。
  • -p PORT, --port PORT: 指定訪問埠,預設為 5000 。
  • -d, --no-debug: 不啟用除錯模式。

當然,這些只是在開發和測試過程中所執行的方式。一般而言,會為程式設定 開發、測試、生產 三種執行環境,程式執行中所需要用到的一些變數從環境中讀取。生產環境中的執行命令會在後續說明中單獨介紹。

資料儲存

網頁程式一般分為兩部分,一部分是供執行的程式 ~ 如我們使用 Flask 寫的程式,另一部分是網頁的內容 ~ 如「使用者的資料,文章,圖片等」,一般使用資料庫儲存。

對於 Flask 程式而言,可使用 Git 進行管理 ~ 即購買的伺服器既是「網頁伺服器」又是「Git伺服器」,以便於版本控制及網頁遷移。

對於網頁內容,一般使用資料庫進行儲存(在 Flask 程式中使用 flask-sqlalchemy 來進行操作),使用資料庫進行備份以儲存資料。

如此即可實現網頁的快速遷移,也可較好的對資料進行儲存 ~ 網頁遷移時只需要部署環境即可。

參考資料

  1. Flask 官方網站, http://flask.pocoo.org/. 2018/09/23.
  2. MiguelGrinberg, 格林布戈, 安道. Flask Web開發:基於Python的Web應用開發實戰[M]. 人民郵電出版社, 2015.
  3. Awesome Flask, https://github.com/humiaozuzu/awesome-flas....

相關文章