內容簡介
這是一本面向Python程式設計師的,全面介紹Python Web框架Flask的書。
· 國內首本Flask著作,在內容上涵蓋完整的Flask Web開發學習路徑,在實踐上包含完整的Flask Web程式開發流程。同時兼容Python2 .7和Python3.6。
· 內容最新,基於Flask 1.0.2版本,所有的Python庫、前端框架和JavaScript庫均使用最新版本。
· 內容全面,除了基礎知識,還包含Web API、全文搜尋、國際化和本地化、第三方登錄、AJAX、WebSocket、源碼分析、擴展開發等實用內容。
· 實戰性強,包含8個示例程式,5個實戰項目和1個Flask擴展。實戰項目包括留言板、個人部落格、圖片社交網站、待辦事項程式和聊天室,分別對應不同的知識點,難度遞增。
· 5個實戰項目的Git標籤經過精心設定,每個標籤都對應新增的某個程式功能。
· 全書所有章節均經過精心設計和編排,力求滿足不同水平讀者的需要,並且讓讀者可以循序漸進的掌握Flask開發知識和技巧。
· 通過豐富的圖表和代碼示例講解複雜知識點,儘量做到通俗易懂。
本書共16章,分為三部分。
第一部分 基礎篇(第1~6章)
通過大量的程式實例詳細介紹了Flask的所有基礎知識,同時在每章的後面又提供了一些進階技巧,供進階讀者學習。
第二部分 實戰篇(第7~11章)
通過5個真實的項目案例來串接和闡釋不同的知識點,難度逐漸遞增。這5個案例分別為:留言板SayHello、個人部落格Bluelog、圖片社交網站Albumy、待辦事項程式Todoism和聊天室CatChat。
第三部分 進階篇(第12~16章)
首先介紹了Flask程式的部署流程:測試、性能最佳化和部署上線;然後通過一個真實的實例講解了Flask擴展的開發,最後以原始碼為切入點深入剖析了Flask的實現原理與主要工作機制。
作者簡介
李輝(Grey Li),Flask官方開發團隊(Pallets Team)成員,知乎專欄“Hello, Flask!”作者,HelloFlask網站創建者。對Flask有非常深入的研究,熟悉它的原始碼,有豐富的項目經驗。他熱愛分享和創造,曾為Flask等多個開源項目貢獻過代碼。
目錄
第1章 初識Flask
1.1 搭建開發環境
1.1.1 Pipenv工作流
1.1.2 安裝Flask
1.1.3 集成開發環境
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.4 Python Shell
1.5 Flask擴展
1.6 項目配置
1.7 URL與端點
1.8 Flask命令
1.9 模板與靜態檔案
1.10 Flask與MVC架構
1.11 本章小結
第2章 Flask與HTTP
2.1 請求回響循環
2.2 HTTP請求
2.2.1 請求報文
2.2.2 Request對象
2.2.3 在Flask中處理請求
2.2.4 請求鉤子
2.3 HTTP回響
2.3.1 回響報文
2.3.2 在Flask中生成回響
2.3.3 回響格式
2.3.4 來一塊Cookie
2.3.5 session:安全的Cookie
2.4 Flask上下文
2.4.1 上下文全局變數
2.4.2 激活上下文
2.4.3 上下文鉤子
2.5 HTTP進階實踐
2.5.1 重定向回上一個頁面
2.5.2 使用AJAX技術傳送異步請求
2.5.3 HTTP伺服器端推送
2.5.4 Web安全防範
2.6 本章小結
第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 空白控制
3.4.2 載入靜態檔案
3.4.3 訊息閃現
3.4.4 自定義錯誤頁面
3.4.5 JavaScript和CSS中的Jinja2
3.5 本章小結
第4章 表單
4.1 HTML表單
4.2 使用Flask-WTF處理表單
4.2.1 定義WTForms表單類
4.2.2 輸出HTML代碼
4.2.3 在模板中渲染表單
4.3 處理表單數據
4.3.1 提交表單
4.3.2 驗證表單數據
4.3.3 在模板中渲染錯誤訊息
4.4 表單進階實踐
4.4.1 設定錯誤訊息語言
4.4.2 使用宏渲染表單
4.4.3 自定義驗證器
4.4.4 檔案上傳
4.4.5 使用Flask-CKEditor集成富文本編輯器
4.4.6 單個表單多個提交按鈕
4.4.7 單個頁面多個表單
4.5 本章小結
第5章 資料庫
5.1 資料庫的分類
5.1.1 SQL
5.1.2 NoSQL
5.1.3 如何選擇?
5.2 ORM魔法
5.3 使用Flask-SQLAlchemy管理資料庫
5.3.1 連線資料庫伺服器
5.3.2 定義資料庫模型
5.3.3 創建資料庫和表
5.4 資料庫操作
5.4.1 CRUD
5.4.2 在視圖函數裡運算元據庫
5.5 定義關係
5.5.1 配置Python Shell上下文
5.5.2 一對多
5.5.3 多對一
5.5.4 一對一
5.5.5 多對多
5.6 更新資料庫表
5.6.1 重新生成表
5.6.2 使用Flask-Migrate遷移資料庫
5.6.3 開發時是否需要遷移?
5.7 資料庫進階實踐
5.7.1 級聯操作
5.7.2 事件監聽
5.8 本章小結
第6章 電子郵件
6.1 使用Flask-Mail傳送電子郵件
6.1.1 配置Flask-Mail
6.1.2 構建郵件數據
6.1.3 傳送郵件
6.2 使用事務郵件服務SendGird
6.2.1 註冊SendGird
6.2.2 SendGrid SMTP轉發
6.2.3 SendGrid Web API轉發
6.3 電子郵件進階實踐
6.3.1 提供HTML正文
6.3.2 使用Jinja2模板組織郵件正文
6.3.3 異步傳送郵件
6.4 本章小結
第二部分 實戰篇
第7章 留言板
7.1 使用包組織代碼
7.1.1 配置檔案
7.1.2 創建程式實例
7.2 Web程式開發流程
7.2.1 程式功能設計
7.2.2 前端頁面開發
7.2.3 後端程式開發
7.3 使用Bootstrap-Flask簡化頁面編寫
7.3.1 載入資源檔案
7.3.2 快捷渲染表單
7.4 使用Flask-Moment本地化日期和時間
7.4.1 本地化前的準備
7.4.2 使用Flask-Moment集成Moment.js
7.4.3 渲染時間日期
7.5 使用Faker生成虛擬數據
7.6 使用Flask-DebugToolbar調試程式
7.7 Flask配置的兩種組織形式
7.7.1 環境變數優先
7.7.2 實例資料夾覆蓋
7.8 本章小結
第8章 個人部落格
8.1 大型項目結構
8.1.1 使用藍本模組化程式
8.1.2 使用類組織配置
8.1.3 使用工廠函式創建程式實例
8.2 編寫程式骨架
8.2.1 資料庫
8.2.2 模板
8.2.3 表單
8.2.4 視圖函式
8.2.5 電子郵件支持
8.3 編寫部落格前台
8.3.1 分頁顯示文章列表
8.3.2 顯示文章正文
8.3.3 文章固定連結
8.3.4 顯示分類文章列表
8.3.5 顯示評論列表
8.3.6 發表評論與回復
8.3.7 支持回複評論
8.3.8 網站主題切換
8.4 初始化部落格
8.4.1 安全存儲密碼
8.4.2 創建管理員用戶
8.5 使用Flask-Login管理用戶認證
8.5.1 獲取當前用戶
8.5.2 登入用戶
8.5.3 登出用戶
8.5.4 視圖保護
8.6 使用CSRFProtect實現CSRF保護
8.7 編寫部落格後台
8.7.1 文章管理
8.7.2 評論管理
8.7.3 分類管理
8.8 本章小結
第9章 圖片社交網站
9.1 項目組織架構
9.1.1 功能式架構
9.1.2 分區式架構
9.1.3 混合式架構
9.1.4 如何選擇
9.2 編寫程式骨架
9.2.1 資料庫模型與虛擬數據
9.2.2 模板與靜態檔案
9.3 高級用戶認證
9.3.1 用戶註冊
9.3.2 驗證信箱地址
9.3.3 使用裝飾器過濾未確認用戶
9.3.4 密碼重置
9.4 基於用戶角色的許可權管理
9.4.1 角色與許可權模型
9.4.2 設定角色與許可權
9.4.3 寫入角色與許可權
9.4.4 驗證用戶許可權
9.5 使用Flask-Dropzone最佳化檔案上傳
9.5.1 配置Flask-Dropzone
9.5.2 渲染上傳區域
9.5.3 處理並保存上傳圖片
9.6 使用Flask-Avatars處理用戶頭像
9.6.1 默認頭像
9.6.2 生成隨機頭像
9.7 圖片展示與管理
9.7.1 在用戶主頁顯示圖片列表
9.7.2 圖片詳情頁
9.7.3 上一張下一張跳轉
9.7.4 刪除確認模態框
9.7.5 舉報圖片
9.7.6 圖片描述
9.7.7 圖片標籤
9.7.8 用戶資料彈窗
9.8 收藏圖片
9.8.1 使用關聯模型表示多對多關係
9.8.2 添加和取消收藏
9.8.3 收藏者和收藏頁面
9.9 用戶關注
9.9.1 自引用多對多關係
9.9.2 關注與取消關注
9.9.3 顯示關注用戶列表
9.9.4 使用AJAX在彈窗中執行關注操作
9.10 訊息提醒
9.10.1 提醒訊息在資料庫中的表示
9.10.2 創建提醒
9.10.3 顯示和管理提醒
9.10.4 通過輪詢實時更新未讀計數
9.11 用戶資料與賬戶設定
9.11.1 編輯個人資料
9.11.2 自定義頭像
9.11.3 更改密碼
9.11.4 提醒訊息開關
9.11.5 將收藏設為僅自己可見
9.11.6 註銷賬號
9.12 首頁與探索
9.12.1 獲取正在關注用戶的圖片
9.12.2 使用聯結和分組查詢獲取熱門標籤
9.12.3 使用資料庫通用函式獲取隨機圖片
9.13 使用Flask-Whooshee實現全文搜尋
9.13.1 創建索引
9.13.2 搜尋表單
9.13.3 顯示搜尋結果
9.14 編寫網站後台
9.14.1 用戶管理
9.14.2 資源管理
9.14.3 面向管理員的用戶資料編輯
9.15 本章小結
第10章 待辦事項程式
10.1 使用JavaScript和AJAX編寫單頁程式
10.1.1 單頁程式的模板組織
10.1.2 在根頁面內切換子頁面
10.1.3 生成測試賬戶
10.1.4 添加新待辦條目
10.2 國際化與本地化
10.2.1 使用Flask-Babel集成Babel
10.2.2 區域和語言
10.2.3 文本的國際化
10.2.4 文本的本地化
10.2.5 時間與日期的本地化
10.3 設計並編寫Web API
10.3.1 認識Web API
10.3.2 設計優美實用的Web API
10.3.3 使用Flask編寫Web API
10.3.4 使用OAuth認證
10.3.5 資源的序列化
10.3.6 資源的反序列化
10.3.7 Web API的測試與發布
10.4 本章小結
第11章 線上聊天室
11.1 編寫程式骨架
11.2 Gravatar頭像
11.3 使用Flask-SocketIO建立實時雙向通訊
11.3.1 建立Socket.IO連線
11.3.2 一條訊息的旅程
11.3.3 線上人數統計
11.3.4 通訊頻道分離
11.4 使用Flask-OAuthlib實現第三方登錄
11.4.1 編寫OAuth客戶端
11.4.2 註冊OAuth程式
11.4.3 處理OAuth2授權
11.4.4 處理OAuth1授權
11.5 聊天室功能增強
11.5.1 無限滾動載入歷史訊息
11.5.2 Markdown支持
11.5.3 代碼語法高亮
11.5.4 標籤頁訊息提醒
11.5.5 瀏覽器桌面通知
11.5.6 訊息管理
11.6 本章小結
第三部分 高級篇
第12章 自動化測試
12.1 認識自動化測試
12.2 Flask測試客戶端
12.3 使用unittest編寫單元測試
12.3.1 Flask程式的測試固件
12.3.2 編寫測試用例
12.3.3 組織測試
12.3.4 運行測試
12.4 使用Selenium進行用戶界面測試
12.4.1 安裝瀏覽器與驅動
12.4.2 準備測試環境
12.4.3 編寫測試代碼
12.5 使用Coverage.py計算測試覆蓋率
12.5.1 基本用法
12.5.2 獲取測試覆蓋率
12.6 使用Flake8檢查代碼質量
12.7 本章小結
第13章 性能最佳化
13.1 程式性能分析
13.1.1 函式性能分析
13.1.2 資料庫查詢分析
13.2 使用Flask-Caching設定快取
13.2.1 快取視圖函式
13.2.2 快取其他函式
13.2.3 更新快取
13.2.4 使用Redis作為快取後端
13.3 使用Flask-Assets最佳化靜態資源
13.3.1 註冊資源集
13.3.2 生成資源集檔案
13.3.3 在模板中載入資源集
13.4 本章小結
第14章 部署上線
14.1 傳統部署 VS 雲部署
14.2 基本部署流程
14.3 部署前的準備
14.3.1 更新程式配置
14.3.2 創建生產環境專用的程式實例
14.3.3 設定遷移工具
14.3.4 程式日誌
14.3.5 手動導入環境變數
14.3.6 HTTPS轉發
14.4 部署到Linux伺服器
14.4.1 使用OpenSSH登錄遠程主機
14.4.2 安裝基本庫和工具
14.4.3 安全防護措施
14.4.4 推送代碼並初始化程式環境
14.4.5 使用Gunicorn運行程式
14.4.6 使用Nginx提供反向代理
14.4.7 使用Supervisor管理進程
14.4.8 更新部署後的程式
14.5 部署到PythonAnywhere
14.5.1 反向代理設定
14.5.2 創建PythonAnywhere程式
14.5.3 推送代碼並初始化程式環境
14.5.4 創建資料庫
14.5.5 設定虛擬環境
14.5.6 靜態檔案
14.5.7 運行和更新程式
14.6 部署到Heroku
14.6.1 通過Heroku Git部署
14.6.2 使用GitHub部署
14.7 下一步做什麼?
14.8 本章小結
第15章 Flask擴展開發
15.1 擴展的命名
15.2 擴展項目骨架
15.3 編寫擴展類
15.4 添加擴展配置
15.5 實現擴展功能
15.5.1 載入靜態資源
15.5.2 創建分享組件
15.5.3 在移動設備上隱藏
15.6 開源發布前的準備
15.6.1 添加文檔字元串與注釋
15.6.2 編寫README與文檔
15.6.3 為打包做準備
15.6.4 編寫示例程式
15.6.5 編寫單元測試
15.7 發布到PyPI
15.7.1 創建PyPI賬號
15.7.2 使用setuptools打包
15.7.3 使用twine上傳
15.8 編寫良好的擴展
15.9 本章小結
第16章 Flask工作原理與機制解析
16.1 閱讀Flask源碼
16.1.1 獲取Flask源碼
16.1.2 如何閱讀源碼
16.1.3 Flask發行版本分析
16.2 Flask的設計理念
16.2.1 “微”框架
16.2.2 兩個核心依賴
16.2.3 顯式程式對象
16.2.4 本地上下文
16.2.5 三種程式狀態
16.2.6 豐富的自定義支持
16.3 Flask與WSGI
16.3.1 WSGI程式
16.3.2 WSGI伺服器
16.3.3 中間件
16.4 Flask的工作流程與機制
16.4.1 Flask中的請求回響循環
16.4.2 路由系統
16.4.3 本地上下文
16.4.4 請求與回響對象
16.4.5 session
16.4.6 藍本
16.4.7 模板渲染
16.5 本章小結