相關主題
商品描述
這是一本為各水平層次的Python Web開發者提供完整Flask Web開發知識體系的鴻篇巨著,由 Flask 官方團隊成員撰寫,獲得 Flask 之父Armin Ronacher的高度認可和 。本書內容系統全面,從Flask的基礎知識到完整的Flask項目實戰,從Flask Web API開發到Flask應用的性能優化,從Flask項目的生產部署到Flask的源碼解析,本書提供了完整的Python Web工程化學習路徑。本書實戰案例豐富,基礎篇的大部分章節都針對相應的知識點提供了完整可運行的示例程序,實戰篇則通過2個較為完整的Flask項目講解了Flask項目的組織方式和技巧,以及Flask開發中各類功能的實現方法和技巧。內容緊跟技術發展,書中的代碼和示例程序均基於 Flask 新發布的穩定版 3.x 編寫,書中涉及的其他 Python 包和前端庫也全部采用當前的新版本,確保本書在未來較長一段時間內仍可保持 性和實用性。本書共 14 章,分為三部分:基礎篇(第 1–7 章):通過豐富的示例講解了 Flask 的核心基礎與進階技巧,為後續學習打下堅實基礎。實戰篇(第 8–10 章):通過兩個完整項目案例,將 Flask 的知識點融會貫通,帶領讀者完成從 0 到 1 的開發過程。進階篇(第 11–14 章):涵蓋基於 Flask 與 APIFlask 的 Web API 開發、性能優化與生產部署,並深入剖析 Flask 的源碼實現與核心機制。本書不僅提供系統的知識講解和完整的項目源碼,還提供豐富的在線資源和活躍的讀者社群。只要你了解Python的基本語法,無論你是零基礎Web開發愛好者,還是想從事 Python Web 開發的後端工程師、運維工程師、爬蟲工程師、數據科學工程師等,抑或是想要從 Django、FastAPI 等其他 Python Web 框架轉向 Flask 的 Python 工程師,都能從中獲益匪淺。掌握本書,你將不再畏懼任何覆雜的Web開發需求,在AI時代構築自己堅不可摧的核心競爭力。
作者簡介
Flask 與 APIFlask 的維護者,Flask 官方開發團隊(Pallets Projects)成員,HelloFlask 與代碼廚房社區(CodeKitchen Community)的創建者,微軟 Python 方向最有價值專家(Microsoft MVP)。現就職於戴爾中國卓越研發集團,擔任首席軟件工程師。
他對 Flask 有非常深入的研究,熟悉其源代碼,擁有豐富的項目實踐經驗。熱衷於開源軟件的應用與推廣,曾為包括 Flask 在內的多個開源項目貢獻大量代碼,並多次在 PyCon China、PyCon US、COSCUP、COSCon、CommunityOverCode 等技術大會上發表演講。
你可以在 GitHub(github.com/greyli)上查看他的開源項目,或訪問他的個人網站(greyli.com)了解更多信息。
目錄大綱
序
前言
基礎篇
第 1 章 初識 Flask
1.1 搭建開發環境
1.1.1 創建練習項目目錄
1.1.2 使用 PDM 管理虛擬環境和依賴
1.1.3 設置 PyPI 鏡像源
1.1.4 安裝 Flask
1.1.5 集成開發環境 PyCharm
1.2 Hello,Flask !
1.2.1 創建程序實例
1.2.2 註冊路由
1.3 開發服務器
1.3.1 Run,Flask,Run !
1.3.2 程序自動發現機制
1.3.3 開啟調試模式
1.3.4 使服務器對外可見
1.3.5 改變默認端口
1.3.6 使用 PyCharm 運行服務器
1.4 Flask Shell
1.5 Flask 擴展
1.6 項目配置
1.7 視圖、URL 和端點
1.8 Flask 命令
1.9 模板與靜態文件
1.10 獲取和使用示例程序
1.11 本章小結
第 2 章 Flask 與 HTTP
2.1 請求 - 響應循環
2.2 HTTP 請求
2.2.1 存儲請求信息的 request 對象
2.2.2 在 Flask 中處理請求
2.2.3 請求鉤子
2.3 HTTP 響應
2.3.1 在 Flask 中生成響應
2.3.2 cookie 和 session 對象
2.4 Flask 上下文
2.4.1 上下文全局變量
2.4.2 推送上下文
2.4.3 上下文鉤子
2.5 Web 安全防範
2.5.1 註入攻擊
2.5.2 XSS 攻擊
2.5.3 CSRF 攻擊
2.6 小實踐:重定向到上一個頁面
2.6.1 獲取上一個頁面的 URL
2.6.2 對 URL 進行安全驗證
2.7 本章小結
第 3 章 模板與靜態文件
3.1 模板的基本用法
3.1.1 創建模板
3.1.2 模板語法
3.1.3 渲染模板
3.2 模板的輔助工具
3.2.1 模板上下文
3.2.2 全局對象
3.2.3 過濾器
3.2.4 測試器
3.2.5 模板環境對象
3.3 模板的組織結構
3.3.1 局部模板
3.3.2 宏
3.3.3 模板繼承
3.4 靜態文件
3.4.1 添加 Favicon
3.4.2 使用 CSS 框架:Bootstrap
3.4.3 JavaScript 和 CSS 中的 Jinja
3.5 消息閃現
3.5.1 在視圖函數中發送消息
3.5.2 在模板中渲染消息
3.6 自定義錯誤頁面
3.7 使用 Bootstrap-Flask 簡化模板編寫
3.8 本章小結
第 4 章 表單
4.1 HTML 表單
4.2 使用 WTForms 和 Flask-WTF 處理表單
4.2.1 定義表單類
4.2.2 輸出表單 HTML 代碼
4.2.3 在模板中渲染表單
4.3 處理表單數據
4.3.1 提交表單
4.3.2 驗證表單數據
4.3.3 在模板中渲染錯誤消息
4.3.4 設置驗證錯誤消息的語言
4.4 自定義驗證器
4.4.1 驗證方法
4.4.2 全局驗證器
4.5 使用 Bootstrap-Flask 快速渲染表單
4.5.1 渲染表單字段
4.5.2 渲染整個表單
4.5.3 渲染表單行
4.5.4 設置提交按鈕的樣式
4.6 本章小結
第 5 章 數據庫
5.1 數據庫分類
5.1.1 SQL
5.1.2 NoSQL
5.1.3 如何選擇數據庫
5.2 ORM 魔法
5.3 安裝和初始化 Flask-SQLAlchemy
5.4 連接數據庫服務器
5.4.1 連接到 SQLite
5.4.2 連接到 MySQL
5.4.3 連接到 PostgreSQL
5.5 定義 SQLAlchemy 模型類
5.5.1 定義表名
5.5.2 定義字段
5.5.3 定義 repr() 方法
5.6 創建數據庫表
5.7 數據庫操作
5.7.1 會話
5.7.2 插入新記錄
5.7.3 獲取記錄
5.7.4 過濾記錄
5.7.5 更新記錄
5.7.6 刪除記錄
5.8 配置 Python Shell 上下文
5.9 定義關系
5.9.1 一對多
5.9.2 多對一
5.9.3 一對一
5.9.4 多對多
5.9.5 基於只寫加載器(Write-only Loader)獲取集合關系記錄
5.9.6 是否使用外鍵
5.10 更新數據庫表與數據遷移
5.10.1 重新生成表
5.10.2 使用 Flask-Migrate 遷移數據庫
5.10.3 開發時是否需要進行遷移
5.11 數據庫高級實踐
5.11.1 級聯操作
5.11.2 事件監聽
5.11.3 外鍵 ON DELETE 級聯
5.12 使用 Faker 生成虛擬數據
5.13 小練習:編寫一個記事本程序
5.13.1 創建筆記
5.13.2 顯示筆記列表
5.13.3 更新筆記
5.13.4 刪除筆記
5.14 本章小結
第 6 章 自動化測試
6.1 了解自動化測試
6.2 Flask 測試客戶端
6.3 使用 unittest 編寫單元測試
6.3.1 Flask 程序的測試固件
6.3.2 為測試創建程序上下文
6.3.3 編寫測試用例
6.3.4 運行測試
6.4 測試 Flask 命令
6.5 使用 coverage.py 計算測試覆蓋率
6.5.1 基本用法
6.5.2 獲取測試覆蓋率
6.5.3 使用 pytest-cov 集成 coverage.py
6.6 使用 Ruff 優化代碼風格
6.6.1 代碼風格檢查
6.6.2 代碼格式化
6.7 類型標註
6.8 本章小結
第 7 章 常用 Flask 開發技巧
7.1 使用 Flask-Mailman 發送電子郵件
7.1.1 配置 Flask-Mailman
7.1.2 構建郵件數據
7.1.3 發送郵件
7.1.4 發送多封郵件
7.1.5 提供 HTML 格式的郵件正文
7.1.6 使用模板組織郵件正文
7.1.7 異步發送郵件
7.2 使用 AJAX 發送異步請求
7.2.1 認識 AJAX
7.2.2 使用 Fetch API 發送 AJAX 請求
7.2.3 處理 AJAX 請求
7.2.4 處理 AJAX 響應
7.3 使用 Flask-WTF 上傳文件
7.3.1 定義上傳字段
7.3.2 渲染上傳表單
7.3.3 處理上傳文件
7.3.4 查看和下載上傳文件
7.3.5 上傳多個文件
7.4 使用 Flask-CKEditor 集成富文本編輯器
7.4.1 引入 CKEditor JavaScript 資源
7.4.2 定義 CKEditor 編輯器字段並渲染
7.4.3 配置 CKEditor 編輯器
7.4.4 獲取編輯器字段數據並渲染
7.4.5 使用 Bleach 進行 HTML 安全清理
7.4.6 上傳圖片
7.5 使用 CSRFProtect 實現 CSRF 保護
7.5.1 設置 CSRF 令牌
7.5.2 處理 CSRF 錯誤
7.6 使用 Flask-DebugToolbar 調試程序
7.7 本章小結
實戰篇
第 8 章 項目組織
8.1 基本項目組織技巧
8.1.1 使用包組織代碼
8.1.2 在文件中存儲程序配置
8.1.3 註冊視圖函數到程序實例
8.1.4 使用絕對導入
8.1.5 運行使用包組織的程序
8.1.6 創建子包
8.2 使用藍本模塊化程序
8.2.1 創建藍本
8.2.2 裝配藍本
8.2.3 註冊藍本
8.2.4 藍本的路由端點
8.2.5 藍本靜態文件和模板
8.2.6 藍本嵌套
8.3 組織程序配置
8.3.1 從環境變量中讀取配置
8.3.2 使用 python-dotenv 管理環境變量
8.3.3 使用 Python 類組織程序配置
8.4 使用工廠函數創建程序實例
8.4.1 初始化擴展
8.4.2 組織工廠函數
8.4.3 創建程序入口腳本
8.4.4 使用 current_app 獲取程序實例
8.5 組織測試
8.6 項目組織架構
8.6.1 功能式架構
8.6.2 分區式架構
8.6.3 如何選擇組織架構
8.7 本章小結
第 9 章 程序實例:個人博客
9.1 Web 程序開發流程
9.1.1 程序功能設計
9.1.2 前端頁面開發
9.1.3 後端程序開發
9.1.4 部署上線
9.2 編寫程序框架
9.2.1 創建數據庫模型
9.2.2 鄰接列表關系
9.2.3 生成虛擬數據
9.2.4 模板文件
9.2.5 基模板
9.2.6 模板上下文
9.2.7 視圖函數
9.2.8 單元測試
9.3 渲染導航鏈接
9.4 實現 Flash 消息分類
9.5 日期和時間的本地化
9.5.1 存儲 UTC 時間
9.5.2 使用 Day.js 渲染日期和時間
9.5.3 渲染不同語言的時間
9.5.4 渲染日期時間
9.5.5 渲染相對時間
9.6 編寫博客前臺
9.6.1 分頁顯示文章列表
9.6.2 顯示文章正文
9.6.3 文章固定鏈接
9.6.4 顯示分類文章列表
9.6.5 顯示評論列表
9.7 文章評論與回覆
9.7.1 發送評論提醒郵件
9.7.2 創建評論表單
9.7.3 發表評論
9.7.4 支持回覆評論
9.8 網站主題切換
9.9 創建管理員用戶
9.9.1 安全存儲密碼
9.9.2 創建用戶命令
9.10 使用 Flask-Login 管理用戶認證
9.10.1 獲取當前用戶
9.10.2 登錄表單
9.10.3 登錄用戶
9.10.4 登出用戶
9.10.5 視圖保護
9.10.6 在單元測試中認證
9.11 編寫博客管理後臺
9.11.1 文章管理
9.11.2 評論管理
9.11.3 分類管理
9.12 本章小結
第 10 章 程序實例:圖片社交網站
10.1 程序功能與數據庫設計
10.1.1 數據庫模型與虛擬圖片
10.1.2 模板和靜態文件
10.1.3 使用 Bootstrap 圖標
10.2 用戶註冊與驗證
10.2.1 實現用戶註冊
10.2.2 使用 JWT 進行郵箱驗證
10.2.3 使用裝飾器過濾未確認用戶
10.2.4 密碼重置
10.3 基於用戶角色的權限管理
10.3.1 角色與權限模型
10.3.2 設置角色和權限
10.3.3 寫入角色和權限
10.3.4 驗證用戶權限
10.4 使用 Flask-Dropzone 優化文件上傳功能
10.4.1 配置 Flask-Dropzone
10.4.2 渲染上傳區域
10.4.3 處理並保存上傳圖片
10.5 使用 Flask-Avatars 處理用戶頭像
10.5.1 使用默認頭像
10.5.2 生成隨機頭像
10.6 圖片展示與管理
10.6.1 在用戶主頁顯示圖片列表
10.6.2 圖片詳情頁
10.6.3 上一張和下一張跳轉
10.6.4 刪除確認模態框
10.6.5 舉報圖片
10.6.6 圖片描述
10.6.7 圖片標簽
10.6.8 用戶資料彈窗
10.7 圖片收藏
10.7.1 添加和取消收藏
10.7.2 收藏者和收藏頁面
10.8 用戶關註
10.8.1 自引用的多對多關系
10.8.2 關註與取消關註
10.8.3 顯示關註用戶列表
10.8.4 使用 AJAX 在彈窗中執行關註操作
10.9 消息提醒
10.9.1 提醒消息在數據庫中的表示
10.9.2 創建提醒
10.9.3 顯示和管理提醒
10.9.4 通過輪詢實時更新未讀計數
10.10 用戶資料與賬戶設置
10.10.1 編輯用戶個人資料
10.10.2 自定義頭像
10.10.3 更改密碼
10.10.4 設置提醒消息開關
10.10.5 將收藏設置為僅自己可見
10.10.6 註銷賬戶
10.11 首頁與探索
10.11.1 獲取正在關註的用戶的圖片
10.11.2 使用聯結和分組查詢獲取熱門標簽
10.11.3 使用數據庫通用函數獲取隨機圖片
10.12 使用 Flask-Whooshee 實現全文搜索
10.12.1 創建索引
10.12.2 搜索表單
10.12.3 顯示搜索結果
10.13 編寫網站後臺
10.13.1 用戶管理
10.13.2 資源管理
10.13.3 面向管理員的用戶資料編輯功能
10.14 使用 Selenium 進行用戶界面測試
10.14.1 基本用法
10.14.2 準備測試環境
10.14.3 編寫測試代碼
10.15 本章小結
進階篇
第 11 章 Web API 開發
11.1 認識 Web API
11.2 資源 URL 和版本設計
11.2.1 多 API 版本的實現
11.2.2 為 API 藍本禁用 CSRF 保護
11.2.3 設置 API 前綴
11.2.4 設置 API 子域
11.3 使用 HTTP 方法描述操作
11.3.1 快捷路由裝飾器
11.3.2 使用類視圖編寫 API
11.4 使用 JSON 傳輸資源
11.4.1 獲取 JSON 請求
11.4.2 生成 JSON 響應
11.4.3 處理錯誤響應
11.5 使用 Flask-CORS 添加 CORS 支持
11.6 使用 APIFlask 開發 Web API
11.6.1 基本用法
11.6.2 請求的驗證與反序列化
11.6.3 響應的格式化與序列化
11.6.4 資源分頁
11.6.5 程序錯誤處理
11.6.6 基於令牌的 API 認證
11.7 測試 Web API
11.7.1 使用 HTTPie 測試 API
11.7.2 為 API 編寫單元測試
11.8 本章小結
第 12 章 性能分析與優化
12.1 程序性能分析
12.1.1 函數性能分析
12.1.2 數據庫查詢性能分析
12.2 使用 Flask-Caching 配置緩存
12.2.1 緩存視圖函數
12.2.2 緩存其他函數
12.2.3 更新緩存
12.2.4 使用 Redis 作為緩存後端
12.3 使用 Flask-Assets 優化靜態資源
12.3.1 註冊資源集
12.3.2 生成資源集文件
12.3.3 在模板中加載資源集
12.4 本章小結
第 13 章 部署上線
13.1 部署方式
13.1.1 傳統部署
13.1.2 容器部署
13.1.3 雲部署
13.1.4 靜態部署
13.2 基本部署流程
13.3 部署前的準備
13.3.1 更新程序配置
13.3.2 手動導入環境變量
13.3.3 設置遷移工具
13.3.4 記錄程序日誌
13.3.5 HTTPS 轉發
13.3.6 安裝 WSGI 服務器
13.4 傳統部署:部署到 Linux 服務器
13.4.1 使用 OpenSSH 登錄遠程主機
13.4.2 安裝基礎庫和工具
13.4.3 安全防護措施
13.4.4 推送代碼並初始化程序環境
13.4.5 使用 Gunicorn 運行程序
13.4.6 使用 Nginx 提供反向代理
13.4.7 使用 Supervisor 管理進程
13.4.8 更新部署後的程序
13.5 容器部署:使用 Docker 進行部署
13.5.1 安裝 Docker
13.5.2 構建程序鏡像
13.5.3 運行和管理容器
13.5.4 配置管理
13.5.5 數據持久化
13.5.6 鏡像分發
13.5.7 部署與升級
13.5.8 容器編排
13.6 下一步該做什麼
13.7 本章小結
第 14 章 Flask 工作原理與機制解析
14.1 閱讀 Flask 源碼
14.1.1 獲取 Flask 源碼
14.1.2 如何閱讀源碼
14.2 Flask 的設計理念
14.2.1 “微”框架
14.2.2 兩個核心依賴
14.2.3 顯式程序對象
14.2.4 本地上下文
14.2.5 三種程序狀態
14.2.6 豐富的自定義支持
14.3 Flask 與 WSGI
14.3.1 WSGI 程序
14.3.2 WSGI 服務器
14.3.3 中間件
14.4 Flask 的工作流程與機制
14.4.1 Flask 中的請求 - 響應循環
14.4.2 路由系統
14.4.3 本地上下文
14.4.4 請求與響應對象
14.4.5 session
14.4.6 藍本
14.4.7 模板渲染
14.5 本章小結
附錄 Flask 資源
