與其他框架相比,Flask 之所以能脫穎而出, 原因在于它能夠讓開發(fā)者做主, 使其對應用擁有全面的創(chuàng)意控制。 或許你聽過和框架斗爭這一說法, 在大多數(shù)框架中, 當你決定使用的解決方案不受框架官方支持時就會發(fā)生這種情況。 你可能想使用不同的數(shù)據(jù)庫引擎或者不同的用戶身份驗證方法, 但是這種偏離框架開發(fā)者設定路線的做法往往會給你帶來很多麻煩。 Flask 就不一樣了!
你喜歡關系型數(shù)據(jù)庫? 很好。 Flask 支持所有的關系型數(shù)據(jù)庫。 你更喜歡使用NoSQL 數(shù)據(jù)庫? 沒問題,Flask 也支持。 你想使用自己開發(fā)的數(shù)據(jù)庫引擎, 根本用不到數(shù)據(jù)庫? 依然沒問題。 在 Flask 中, 你可以自主選擇應用的組件, 如果找不到合適的, 還可以自己開發(fā)。 就這么簡單!
Flask 之所以能給用戶提供這么大的自由度, 關鍵在于其開發(fā)時就考慮到了擴展性。
Flask 提供了一個強健的核心, 其中包含每個 Web 應用都需要的基本功能, 而其他功能則交給生態(tài)系統(tǒng)中眾多的第三方擴展當然, 你也可以自己開發(fā)。
本書將展示筆者使用Flask 開發(fā) Web 應用的工作流程。 這不是使用Flask 開發(fā)應用的唯一選擇, 你可以把這種選擇作為一種推薦方式。
大部分軟件開發(fā)類圖書都使用短而精的示例代碼, 孤立地演示所介紹技術的功能,讓讀者自己去思考如何使用膠水代碼把這些不同的功能組合起來, 開發(fā)出完整可用
的應用。
本書采用了完全不同的方式。 本書中的示例代碼都摘自同一個應用, 開始時很簡單, 后續(xù)各章逐漸進行擴展。 起初只有幾行代碼, 最后將變成功能完善的博客和社交網(wǎng)絡應用。
要想更好地理解本書內(nèi)容, 你需要具備一定的 Python 編程經(jīng)驗。 閱讀本書, 并不要求必須了解 Flask 的相關知識, 但最好理解 Python 的一些概念(比如包、 模塊、 函數(shù)、裝飾器和面向?qū)ο缶幊? , 熟悉異常處理, 知道如何從棧跟蹤中分析問題, 這將有助于你
理解本書。
學習本書示例代碼時, 你的大部分時間都將在命令行中操作, 因此, 你應該能夠熟練使用、 自己操作系統(tǒng)中的命令行。
現(xiàn)代 Web 應用都不可避免地需要使用 HTML、CSS 和JavaScript, 本書開發(fā)的示W(wǎng)eb3.0 應用開發(fā)實戰(zhàn)(從 Web2.0 到 Web3.0)例應用也用到了這些技術, 但本書沒有對其進行詳細介紹, 也沒有說明如何使用。 如果你想開發(fā)完整的應用, 且無法向精通客戶端技術的開發(fā)者尋求幫助, 那就需要對這些語
言有一定程度的了解。
本書配套的代碼是開源的, 作者把它同時上傳到 GitHub 和百度云盤。 由于國內(nèi)部分區(qū)域或網(wǎng)絡服務商的原因, 訪問 GitHub 有時并不是很理想(打不開或下載很慢) 。如果你可以通過修改本地 Hosts 文件順利訪問 GitHub, 則可以從 GitHub 上下載 ZIP或 TAR 格式的源碼; 當然, 也可以從百度云盤直接下載源代碼。 本書并不強調(diào) Git 的使用, 即使你不會配置網(wǎng)絡也不影響代碼運行。需要說明的是, 本書并不是完整且詳盡的 Flask 框架手冊。 雖然本書介紹了 Flask的大部分功能, 但你還需要配合使用 Flask 官方文檔(http://flask. pocoo.org/) 。
本書在編寫過程中, 參考了一些文獻資料, 在此向相關作者表示感謝。 限于作者水平, 本書難免存在不足和疏漏之處, 敬請各位讀者批評指正。
作 者
2023 年9 月
第一部分 Flask簡介
第1章 安裝
1.1 創(chuàng)建應用目錄
1.2 虛擬環(huán)境
1.2.1 創(chuàng)建虛擬環(huán)境
1.2.2 使用虛擬環(huán)境
1.3 使用pip安裝Python包
1.4 使用pipregs輸出包
1.5 使用requirements.txt
1.6 使用pipenv管理包
第2章 應用的基本結(jié)構(gòu)
2.1 網(wǎng)頁顯示過程
2.2 初始化
2.3 路由和視圖函數(shù)
2.4 一個完整的應用
2.5 Web開發(fā)服務器
2.6 動態(tài)路由
2.7 調(diào)試模式
2.8 命令行選項
2.9 請求-響應循環(huán)
2.9.1 應用和請求上下文
2.9.2 請求分派
2.9.3 請求對象
2.9.4 請求鉤子
2.9.5 響應Response
2.9.6 對比cookie與session
2.10 Flask擴展包
第3章 模板
3.1 Jinja2模板引擎
3.1.1 渲染模板
3.1.2 變量及占位符
3.1.3 自定義過濾器
3.1.4 控制結(jié)構(gòu)
3.1.5 宏及模板繼承
3.2 集成Bootstrap
3.3 Bootstrap頁面布局
3.4 自定義錯誤頁面
3.5 鏈接
3.6 靜態(tài)文件
3.7 使用Flask-Moment本地化日期和時間
第4章 Web表單
4.1 配置
4.2 表單驗證
4.2.1 服務器端驗證
4.2.2 客戶端驗證
4.3 自定義驗證函數(shù)
4.3.1 行內(nèi)驗證函數(shù)
4.3.2 全局驗證函數(shù)
4.4 表單誼染
4.5 防御CSRF攻擊
4.6 在視圖函數(shù)中處理表單
4.7 單個頁面多個表單
4.8 重定向和用戶會話
4.9 重定向到上一個頁面
4.9.1 使用HTTP referrer重定向
4.9.2 使用查詢參數(shù)next重定向
4.10 閃現(xiàn)消息
第5章 數(shù)據(jù)庫
5.1 SQL數(shù)據(jù)庫
5.2 NoSQL數(shù)據(jù)庫
5.3 使用SQL還是NoSQL
5.4 Python數(shù)據(jù)庫框架
5.5 使用pymongo管理數(shù)據(jù)庫
5.6 數(shù)據(jù)庫CRUD基本操作
5.6.1 增
5.6.2 刪
5.6.3 改
5.6.4 查
5.7 數(shù)據(jù)庫查詢操作符
5.7.1 比較查詢操作符
5.7.2 邏輯查詢操作符
5.7.3 元素查詢操作符
5.7.4 評估查詢操作符
5.7.5 數(shù)組查詢操作符
5.8 數(shù)據(jù)庫更新操作符
5.8.1 字段更新操作符
5.8.2 數(shù)組更新操作符
5.8.3 修飾操作符
5.9 聚合操作
5.10 地理位置查詢
5.11 在視圖函數(shù)中操作數(shù)據(jù)庫
5.12 集成Python shell
5.13 MongoDB備份與恢復
5.13.1 備份數(shù)據(jù)
5.13.2 還原數(shù)據(jù)
第6章 電子郵件
6.1 使用Flask-Mail提供電子郵件支持
6.2 在Python shell中發(fā)送電子郵件
6.3 在應用中集成電子郵件發(fā)送功能
6.4 異步發(fā)送電子郵件
第7章 大型應用的結(jié)構(gòu)
7.1 項目結(jié)構(gòu)
7.2 配置選項
7.3 應用包
7.3.1 使用應用工廠函數(shù)
7.3.2 在藍本中實現(xiàn)應用功能
7.4 應用腳本
7.5 需求文件
7.6 單元測試
7.7 創(chuàng)建數(shù)據(jù)庫
7.8 運行應用
第二部分 實例:Web 2.0博客
第8章 用戶身份驗證
8.1 Flask的身份驗證擴展
8.2 密碼安全性
8.3 創(chuàng)建身份驗證藍本
8.4 使用Flask-Login驗證用戶身份
8.4.1 準備用于登錄的用戶模型
8.4.2 保護路由
8.4.3 添加登錄表單
8.4.4 用戶登錄
8.4.5 用戶退出
8.4.6 理解Flask-Login的運作方式
8.4.7 登錄測試
8.5 注冊新用戶
8.5.1 添加用戶注冊表單
8.5.2 處理用戶注冊
8.6 確認賬戶
8.6.1 使用itsdangerous生成確認令牌
8.6.2 發(fā)送確認郵件
8.7 管理賬戶
8.8 用戶角色
第9章 用戶資料
9.1 資料信息
9.2 用戶資料頁面
9.3 資料編輯器
9.3.1 用戶級資料編輯器
9.3.2 管理員級資料編輯器
9.4 用戶頭像
第10章 博客文章
10.1 提交和顯示博客文章
10.2 在資料頁中顯示博客文章
10.3 分頁顯示長博客文章列表
10.3.1 創(chuàng)建虛擬博客文章數(shù)據(jù)
10.3.2 在頁面中誼染數(shù)據(jù)
10.3.3 添加分頁導航
10.4 使用Markdown和Flask-PageDown支持富文本文章
10.4.1 使用Flask-PageDown
10.4.2 CKeditor富文本編輯器
10.5 博客文章的固定鏈接
10.6 博客文章編輯器
第11章 關注者
11.1 再論數(shù)據(jù)庫關系
11.2 在資料頁面中顯示關注者
11.3 查看指定用戶的關注者和被關注者
11.4 在首頁顯示所關注用戶的文章
第12章 用戶評論
12.1 評論在數(shù)據(jù)庫中的表示
12.2 提交和顯示評論
12.3 管理評論
第13章 應用接口
13.1 REST簡介
13.1.1 資源就是一切
13.1.2 請求方法
13.1.3 請求和響應主體
13.1.4 版本
13.2 使用Flask實現(xiàn)REST式Web服務
13.2.1 創(chuàng)建API藍本
13.2.2 錯誤處理
13.2.3 使用Flask-HTTPAuth驗證用戶身份
13.2.4 基于令牌的身份驗證
13.2.5 基于JWT的身份驗證
13.2.6 資源和JSON的序列化轉(zhuǎn)換
13.2.7 實現(xiàn)資源的各個端點
13.3 使用Jupyter notebook測試Web服務
第三部分 實例:Web 3.0商城
第14章 Web 3.0簡易商城
14.1 區(qū)塊鏈
14.2 Web 3.0
14.2.1 以太坊域名(ENS)
14.2.2 區(qū)塊鏈存儲
14.3 MetaMask
14.4 Web3.js
14.5 以太坊代幣計量單位
14.6 簡易商城項目結(jié)構(gòu)
14.7 頁面構(gòu)成
14.7.1 路由函數(shù)
14.7.2 視圖模板
14.8 MetaMask獲取錢包余額、交易回執(zhí)
14.8.1 獲取余額
14.8.2 交易回執(zhí)
第四部分 成功在望
第15章 測試
15.1 獲取代碼覆蓋度報告
15.2 Flask測試Web客戶端
15.3 值得測試嗎
15.4 性能
第16章 部署
16.1 部署流程
16.2 把生產(chǎn)環(huán)境中的錯誤寫入日志
16.3 云部署
16.3.1 安裝更新開發(fā)工具及各種依賴
16.3.2 MongoDB數(shù)據(jù)庫
16.3.3 Nginx服務器
16.3.4 Gunicorn服務器
16.3.5 Supervisor進程守護
第17章 其他資源
17.1 使用集成開發(fā)環(huán)境
17.2 尋找Flask擴展
17.3 尋求幫助
17.4 參與Flask社區(qū)
參考文獻