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