李輝(Grey Li),Flask官方開發團隊(Pallets Team)成員,知乎專欄“Hello, Flask!”作者,HelloFlask.com網站創建者。對Flask有非常深入的研究,熟悉它的源代碼,有豐富的項目經驗。
他熱愛分享和創造,曾為Flask等多個開源項目貢獻過代碼,你可以在GitHub(github.com/greyli)上看到他的開源活動。在他的個人網站(greyli.com)上,你可以瞭解到關於他的更多信息。
第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 本章小結
· · · · · · (
收起)
這是一本麵嚮Python程序員的,全麵介紹Python Web框架Flask的書。關於本書的詳細介紹、相關資源等更多信息可以訪問本書的官方主頁http://helloflask.com/book瞭解。
• 國內首本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的實現原理與主要工作機製。