FastAPI是基于Python語言的輕量級、成熟的Web后端開發(fā)框架。它除了簡單易學(xué)、能提供自動生成的API文檔外,還有一個重要優(yōu)點是支持異步技術(shù),其性能可以與NodeJS、GO語言相媲美,為Web項目高并發(fā)訪問提供了更好的技術(shù)選擇。另外,F(xiàn)astAPI定位為商業(yè)級的前后端分離開發(fā)框架,為前端技術(shù)提供了簡單易用的調(diào)用接口。目前,國內(nèi)外不少互聯(lián)網(wǎng)企業(yè),都采用該框架作為商業(yè)項目開發(fā)基礎(chǔ)。本書第1部分為基礎(chǔ)篇,系統(tǒng)介紹了FastAPI的使用;第2部分為實戰(zhàn)篇,通過后端FastAPI框架與前端Vue.js框架的組合,給出了一個商業(yè)實戰(zhàn)項目案例。
國內(nèi)難得的FastAPI書籍,F(xiàn)astAPI是Python技術(shù)體系里輕量級Web框架,在異步處理上具有優(yōu)異的性能表現(xiàn),是Python下極其優(yōu)秀的輕量級框架。本書內(nèi)容編排從易到難,從基礎(chǔ)到項目實戰(zhàn),為開發(fā)人員提供了完整的學(xué)習(xí)內(nèi)容。
前言
FastAPI輕量級后端技術(shù)框架最近兩年突然火了起來,主要原因除了受大紅大紫的基礎(chǔ)語言Python的影響以外,更得益于其獨步天下的異步技術(shù),極高的訪問響應(yīng)性能吸引了眾多IT人員追逐。作者在Python領(lǐng)域深耕多年,通過一年多的辛苦努力,完成了該書的寫作。本書理論與實踐結(jié)合,寫作風(fēng)格繼承了作者劉瑜老師Python系列圖書的風(fēng)格,保證了讀者更好的學(xué)習(xí)體驗。
一、本書設(shè)計原則
1. 基礎(chǔ)知識由淺入深、層層遞進
本書充分發(fā)揮了劉瑜老師的寫作特點,在知識結(jié)構(gòu)的安排和讀者體驗上,都做了認(rèn)真考慮、細(xì)致雕琢,全書配有豐富的圖片、表格、代碼、圖標(biāo)提示等,有利于讀者閱讀和吸收知識。
2. 實戰(zhàn)知識直接采用商業(yè)項目案例
編程就是一門以實踐為主的課程,作為軟件領(lǐng)域資深的項目經(jīng)理、技術(shù)總監(jiān),安義老師為本書提供了實際商業(yè)項目案例,讀者從基礎(chǔ)知識能一步踏入項目實戰(zhàn)環(huán)境,具有很高的學(xué)習(xí)和工作應(yīng)用價值。多看高手寫的代碼,可以大幅提高自身的開發(fā)技術(shù)水平。
3. 一如既往引入三酷貓作為故事的主角
劉瑜老師一直認(rèn)為學(xué)習(xí)要認(rèn)真,也需要有點情調(diào),緊松適度是最佳學(xué)習(xí)狀態(tài)。三酷貓(Three Cool Cats)的原型是電影《八條命》里的那只可愛的貓咪,該電影的主題曲為Three Cool Cats。編程累了,看看電影、聽聽音樂,不但愉悅了心情,還能促進創(chuàng)新、創(chuàng)意,使自己所編寫的軟件更具吸引力。所以,本書的主要案例都是使用三酷貓作為主角,由它來為大家講編程故事。
二、學(xué)習(xí)幫助
1. 免費贈送配套視頻
在主要章節(jié)提供約10分鐘的視頻講解,僅起拋磚引玉的作用。
2. 免費贈送配套的源代碼
基礎(chǔ)薄弱的讀者,對照章節(jié)內(nèi)容,可以利用開發(fā)工具先行運行相關(guān)代碼文件,觀看運行結(jié)果,然后再理解對應(yīng)的知識;基礎(chǔ)扎實的讀者,可以自寫代碼,然后與本書配套代碼進行比對,起到驗證作用。
3. 提供QQ群
QQ群作為讀者之間交流學(xué)習(xí)之用。
學(xué)習(xí)QQ群:221742686(請注意入群提示,一個QQ群滿,可以轉(zhuǎn)入新開群)。
教師及項目級別的技術(shù)支持QQ群:651064565。
本書所有配套資源可在QQ群里下載,或通過掃描配套資源二維碼獲取。
三、作者介紹
劉瑜,高級信息系統(tǒng)項目管理師,具有20多年C、ASP、BASIC、FoxBASE、Delphi、Java、C#、Python等編程經(jīng)驗,軟件工程碩士、碩士企業(yè)導(dǎo)師、大數(shù)據(jù)重點實驗室主任。開發(fā)過商業(yè)項目20余套,承擔(dān)省部級千萬級別項目5個,發(fā)表國內(nèi)外論文10余篇。出版了《戰(zhàn)神軟件項目管理深度實戰(zhàn)》《NoSQL數(shù)據(jù)庫入門與實踐》《Python編程從零基礎(chǔ)到項目實戰(zhàn)》《Python編程從數(shù)據(jù)分析到機器學(xué)習(xí)實踐》《算法之美Python語言實現(xiàn)(微課視頻版)》《Python Django Web從入門到項目實戰(zhàn)》。
安義,系統(tǒng)架構(gòu)師,部門經(jīng)理,具有20多年軟件開發(fā)經(jīng)驗,主導(dǎo)過多個行業(yè)(醫(yī)療、教育、互聯(lián)網(wǎng)、地產(chǎn)、游戲、汽車、餐飲等)的軟件系統(tǒng)開發(fā)工作。熟悉多種開發(fā)語言和開發(fā)框架,具有豐富的軟件實戰(zhàn)經(jīng)驗。曾是騰訊公司負(fù)責(zé)袋鼠跳跳應(yīng)用的研發(fā)負(fù)責(zé)人,目前為三酷貓團隊的軟件技術(shù)總監(jiān)!禤ython Django Web從入門到項目實戰(zhàn)》第二作者。
陳逸懷,溫州城市大學(xué)教師教學(xué)發(fā)展中心主任、高級講師,天津職業(yè)技術(shù)師范大學(xué)教育學(xué)博士研究生(自動化教育方向)、碩士生合作導(dǎo)師,軟件設(shè)計師、技師,中國計算機學(xué)會會員,中國創(chuàng)客教育協(xié)會理事,溫州市計算機學(xué)會理事,國家一類職業(yè)技能大賽裁判,青少年機器人大賽國家二級裁判,國家職業(yè)鑒定高級考評員。主編、副主編相關(guān)教材十本,主持并參與廳局級以上課題十余項,發(fā)表相關(guān)論文十余篇。
喻小菲,專職軟件高級工程師,10余年軟件項目開發(fā)經(jīng)驗,F(xiàn)astAPI專業(yè)技術(shù)群群主,承擔(dān)過物聯(lián)網(wǎng)、游戲、網(wǎng)絡(luò)安全等10多個商業(yè)項目。主要從事Python Web方向的開發(fā)工作,對FastAPI、Sanic、Django、Flask等網(wǎng)絡(luò)框架均有研究,始終追蹤Python開發(fā)最前沿的發(fā)展方向,具有豐富的Python Web開發(fā)經(jīng)驗。
四、習(xí)題及實驗使用說明
本書免費提供配套的習(xí)題及實驗,提供該部分內(nèi)容主要為了驗證讀者學(xué)習(xí)效果,鞏固學(xué)習(xí)知識,所以值得一做,并且所有習(xí)題及實驗都提供了標(biāo)準(zhǔn)答案或提示(可通過指定方式獲取)。
五、致謝
在本書編寫過程中,一直受到全國同行的熱情支持和鼓勵,尤其是安徽某軟件公司的李碩總經(jīng)理,在百忙之中也參與了技術(shù)討論;另外,在出版過程中得到了華中科技大學(xué)出版社張玲老師等的大力支持,在此一并感謝!
本書經(jīng)過了作者反復(fù)檢查,受水平所限,仍可能存在紕漏。若讀者朋友發(fā)現(xiàn)問題,請在QQ群向群主反映,萬分感謝!
作者
2022年8月
后記
FastAPI框架是最近幾年紅火起來的基于Python語言的框架,其最大的特點是采用了異步技術(shù),它是目前性能最好的輕量級Web開發(fā)框架之一,為基于網(wǎng)絡(luò)的快速訪問提供了高并發(fā)性能。針對高并發(fā)的應(yīng)用,比如物聯(lián)網(wǎng)或爬蟲類應(yīng)用,F(xiàn)astAPI框架有天生的優(yōu)勢;而Django框架更擅長后臺數(shù)據(jù)的統(tǒng)一管理和相關(guān)功能的快速開發(fā)。把FastAPI框架用于讀寫訪問的快速處理,把Django框架用于后端數(shù)據(jù)的統(tǒng)一管理,是一種經(jīng)典的混合搭配開發(fā)模式。對于Django框架,感興趣的讀者可以參考《Python Django Web從入門到項目實戰(zhàn)》一書。
另外,F(xiàn)astAPI框架采用了目前主流的前后端分離技術(shù),體現(xiàn)了低耦合的設(shè)計思路。
本書最后3章,通過安義老師開發(fā)的一款商業(yè)軟件,詳細(xì)地介紹了以FastAPI框架為后端,Vue.js框架為前端的經(jīng)典開發(fā)案例,這也是目前主流商業(yè)開發(fā)模式,值得讀者仔細(xì)體會,深入研究。讀者掌握該開發(fā)模式,就可以直接面對商業(yè)級別的開發(fā)要求,滿足實際軟件公司應(yīng)聘等的需要。
FastAPI畢竟是最近幾年的新成熟的輕量級技術(shù)框架,劉瑜、安義、陳逸懷、喻小菲四位老師在寫作和實踐過程中也發(fā)現(xiàn)FastAPI部分技術(shù)的不成熟,尤其是幾乎沒有后臺管理功能,與Django框架相比差距很大。
建議:在具體的商業(yè)項目實踐中,需要項目經(jīng)理審慎評估,準(zhǔn)確使用Fast API框架的優(yōu)點,避開其缺點。
作者 2022年春,于天津
劉瑜,高級信息系統(tǒng)項目管理師,具有20多年C、ASP、BASIC、FoxBASE、Delphi、Java、C#、Python等編程經(jīng)驗,軟件工程碩士、碩士企業(yè)導(dǎo)師、大數(shù)據(jù)重點實驗室主任。開發(fā)過商業(yè)項目20余套,承擔(dān)省部級千萬級別項目5個,發(fā)表國內(nèi)外論文10余篇。出版了《戰(zhàn)神軟件項目管理深度實戰(zhàn)》《NoSQL數(shù)據(jù)庫入門與實踐》《Python編程從零基礎(chǔ)到項目實戰(zhàn)》《Python編程從數(shù)據(jù)分析到機器學(xué)習(xí)實踐》《算法之美Python語言實現(xiàn)(微課視頻版)》《Python Django Web從入門到項目實戰(zhàn)》。
安義,系統(tǒng)架構(gòu)師,部門經(jīng)理,具有20多年軟件開發(fā)經(jīng)驗,主導(dǎo)過多個行業(yè)(醫(yī)療、教育、互聯(lián)網(wǎng)、地產(chǎn)、游戲、汽車、餐飲等)的軟件系統(tǒng)開發(fā)工作。熟悉多種開發(fā)語言和開發(fā)框架,具有豐富的軟件實戰(zhàn)經(jīng)驗。曾是騰訊公司負(fù)責(zé)袋鼠跳跳應(yīng)用的研發(fā)負(fù)責(zé)人,目前為三酷貓團隊的軟件技術(shù)總監(jiān)!禤ython Django Web從入門到項目實戰(zhàn)》第二作者。
陳逸懷,溫州城市大學(xué)教師教學(xué)發(fā)展中心主任、高級講師,天津職業(yè)技術(shù)師范大學(xué)教育學(xué)博士研究生(自動化教育方向)、碩士生合作導(dǎo)師,軟件設(shè)計師、技師,中國計算機學(xué)會會員,中國創(chuàng)客教育協(xié)會理事,溫州市計算機學(xué)會理事,國家一類職業(yè)技能大賽裁判,青少年機器人大賽國家二級裁判,國家職業(yè)鑒定高級考評員。主編、副主編相關(guān)教材十本,主持并參與廳局級以上課題十余項,發(fā)表相關(guān)論文十余篇。
喻小菲,專職軟件高級工程師,10余年軟件項目開發(fā)經(jīng)驗,F(xiàn)astAPI專業(yè)技術(shù)群群主,承擔(dān)過物聯(lián)網(wǎng)、游戲、網(wǎng)絡(luò)安全等10多個商業(yè)項目。主要從事Python Web方向的開發(fā)工作,對FastAPI、Sanic、Django、Flask等網(wǎng)絡(luò)框架均有研究,始終追蹤Python開發(fā)最前沿的發(fā)展方向,具有豐富的Python Web開發(fā)經(jīng)驗。
第1部分 基礎(chǔ)篇
第1章 認(rèn)識FastAPI 3
1.1 Web基礎(chǔ)知識 3
1.1.1 Web簡介 3
1.1.2 超文本傳輸協(xié)議基礎(chǔ) 7
1.2 初識FastAPI 10
1.2.1 FastAPI簡介 10
1.2.2 安裝FastAPI 11
1.2.3 驗證安裝結(jié)果 12
1.3 Hello三酷貓 13
1.3.1 第一個程序,Hello三酷貓 13
1.3.2 OpenAPI文檔 14
1.3.3 Python中的異步語法 15
1.4 FastAPI框架構(gòu)成 16
1.4.1 FastAPI框架功能 16
1.4.2 Python類型提示 17
1.4.3 Pydantic框架 21
1.4.4 Starlette框架 24
1.5 PyCharm代碼編輯工具 25
1.5.1 PyCharm簡介及安裝 25
1.5.2 PyCharm常用功能 30
1.6 習(xí)題及實驗 34
第2章 認(rèn)識請求 35
2.1 請求原理 35
2.2 路徑參數(shù) 36
2.2.1 簡單路徑參數(shù) 37
2.2.2 有類型的路徑參數(shù) 38
2.2.3 有類型路徑參數(shù)的數(shù)據(jù)驗證 38
2.2.4 路由訪問順序 39
2.2.5 使用枚舉類型參數(shù) 40
2.3 查詢參數(shù) 42
2.3.1 標(biāo)準(zhǔn)查詢參數(shù) 42
2.3.2 可選查詢參數(shù) 43
2.3.3 必選查詢參數(shù) 44
2.3.4 參數(shù)類型轉(zhuǎn)換 45
2.3.5 同時使用路徑參數(shù)和查詢參數(shù) 46
2.3.6 案例:三酷貓賣海鮮(一) 47
2.4 請求體 48
2.4.1 定義請求體的數(shù)據(jù)模型 49
2.4.2 同時使用路徑參數(shù)、查詢參數(shù)和請求體 51
2.4.3 可選的請求體參數(shù) 54
2.4.4 同時使用多個請求體 56
2.4.5 常規(guī)數(shù)據(jù)類型作為請求體使用 58
2.5 表單和文件 59
2.5.1 表單數(shù)據(jù) 59
2.5.2 文件上傳 60
2.5.3 表單和多文件上傳 62
2.6 案例:三酷貓賣海鮮(二) 62
2.7 習(xí)題及實驗 64
第3章 認(rèn)識響應(yīng) 66
3.1 響應(yīng)原理 66
3.2 響應(yīng)模型 67
3.2.1 認(rèn)識響應(yīng)模型 67
3.2.2 業(yè)務(wù)數(shù)據(jù)模型 71
3.2.3 簡化數(shù)據(jù)模型定義 72
3.2.4 使用多個響應(yīng)模型 73
3.3 內(nèi)置響應(yīng)類 74
3.3.1 純文本響應(yīng) 75
3.3.2 HTML響應(yīng) 75
3.3.3 重定向響應(yīng) 77
3.3.4 JSON響應(yīng) 78
3.3.5 通用響應(yīng) 79
3.3.6 流響應(yīng) 80
3.3.7 文件響應(yīng) 81
3.4 案例:三酷貓賣海鮮(三) 81
3.5 習(xí)題及實驗 83
第4章 深入請求和響應(yīng) 84
4.1 在請求中使用類 84
4.1.1 查詢參數(shù)類 84
4.1.2 路徑參數(shù)類 90
4.1.3 Cookie參數(shù)類 91
4.1.4 Header參數(shù)類 93
4.1.5 Field類 95
4.1.6 實現(xiàn)復(fù)雜的請求數(shù)據(jù)模型 97
4.1.7 直接使用請求類 101
4.2 自定義響應(yīng)返回數(shù)據(jù) 102
4.2.1 自定義Cookie數(shù)據(jù) 102
4.2.2 自定義Header數(shù)據(jù) 103
4.2.3 默認(rèn)響應(yīng)狀態(tài)碼 104
4.2.4 自定義響應(yīng)狀態(tài)碼 105
4.3 異常處理 106
4.3.1 異常類HttpException 106
4.3.2 全局異常處理器 108
4.3.3 內(nèi)置異常處理器 110
4.4 中間件技術(shù) 112
4.4.1 自定義中間件 113
4.4.2 調(diào)用CORS中間件 113
4.4.3 調(diào)用UnicornMiddleware中間件 115
4.4.4 調(diào)用HTTPSRedirectMiddleware中間件 115
4.4.5 調(diào)用TrustedHostMiddleware中間件 116
4.4.6 調(diào)用GZipMiddleware中間件 118
4.5 案例:三酷貓賣海鮮(四) 118
4.6 習(xí)題及實驗 120
第5章 依賴注入 121
5.1 依賴注入原理 121
5.2 使用函數(shù)實現(xiàn)依賴注入 122
5.3 使用類實現(xiàn)依賴注入 124
5.4 依賴注入的嵌套 125
5.5 在裝飾器中使用依賴注入 127
5.6 依賴項中的yield 129
5.7 依賴類的可調(diào)用實例 131
5.8 案例:三酷貓賣海鮮(五) 133
5.9 習(xí)題及實驗 134
第6章 數(shù)據(jù)庫操作 135
6.1 SQLAlchemy基本操作 135
6.1.1 安裝和連接 136
6.1.2 定義數(shù)據(jù)模型 137
6.1.3 定義關(guān)聯(lián)關(guān)系 139
6.1.4 CRUD操作 143
6.1.5 直接使用SQL 145
6.2 連接MySQL 146
6.2.1 安裝數(shù)據(jù)庫驅(qū)動 146
6.2.2 創(chuàng)建項目并連接SQLAlchemy 146
6.2.3 創(chuàng)建SQLAlchemy數(shù)據(jù)庫模型 147
6.2.4 創(chuàng)建Pydantic數(shù)據(jù)模型 148
6.2.5 實現(xiàn)數(shù)據(jù)操作 149
6.2.6 實現(xiàn)FastAPI請求函數(shù) 151
6.3 連接MongoDB 154
6.3.1 安裝MongoDB 155
6.3.2 安裝數(shù)據(jù)庫驅(qū)動 157
6.3.3 實現(xiàn)MongoDB中的數(shù)據(jù)操作 158
6.4 連接Redis 160
6.4.1 安裝Redis 161
6.4.2 安裝數(shù)據(jù)庫驅(qū)動 162
6.4.3 實現(xiàn)Redis中的數(shù)據(jù)操作 163
6.5 案例:三酷貓賣海鮮(六) 165
6.6 習(xí)題及實驗 167
第7章 安全機制 169
7.1 安全機制基本功能 169
7.2 添加基于OAuth 2的安全機制 171
7.3 實現(xiàn)基于OAuth 2的安全機制 172
7.3.1 創(chuàng)建數(shù)據(jù)庫應(yīng)用 173
7.3.2 增加注冊用戶功能 175
7.3.3 生成令牌 178
7.3.4 增加用戶登錄功能 178
7.3.5 獲取當(dāng)前登錄用戶數(shù)據(jù) 180
7.4 習(xí)題及實驗 182
第8章 異步技術(shù) 183
8.1 基本概念 183
8.1.1 進程/線程 183
8.1.2 阻塞/非阻塞 184
8.1.3 同步/異步 185
8.1.4 并發(fā)/并行 185
8.1.5 GIL 185
8.2 協(xié)程 186
8.2.1 事件循環(huán)加回調(diào) 186
8.2.2 基于生成器的協(xié)程 186
8.2.3 使用yield from 改進協(xié)程 187
8.2.4 原生協(xié)程 187
8.3 Asyncio庫介紹 187
8.3.1 事件循環(huán) 188
8.3.2 協(xié)程 188
8.3.3 Future對象 189
8.3.4 Task和可等待對象 189
8.4 案例:三酷貓賣海鮮(七) 190
8.5 習(xí)題及實驗 191
第9章 企業(yè)應(yīng)用架構(gòu) 193
9.1 應(yīng)用程序和子應(yīng)用 193
9.1.1 使用環(huán)境變量 193
9.1.2 應(yīng)用事件處理 197
9.1.3 管理子應(yīng)用 198
9.1.4 管理外部Web應(yīng)用 200
9.2 應(yīng)用模塊管理 201
9.2.1 路由類 202
9.2.2 應(yīng)用目錄結(jié)構(gòu) 202
9.3 頁面模板技術(shù) 204
9.3.1 Jinja2模板入門 204
9.3.2 管理靜態(tài)文件 206
9.4 案例:三酷貓賣海鮮(八) 207
9.5 習(xí)題及實驗 210
第10章 測試與部署 211
10.1 測試工具 211
10.1.1 常規(guī)測試 211
10.1.2 分離測試代碼 214
10.1.3 應(yīng)用事件測試 215
10.1.4 依賴項測試 216
10.1.5 測試數(shù)據(jù)庫 218
10.1.6 異步測試工具 219
10.2 部署程序 220
10.2.1 virtualenv和pip3 221
10.2.2 部署到Linux服務(wù)器 222
10.2.3 部署為后臺進程 223
10.2.4 使用代理服務(wù) 225
10.3 案例:三酷貓海鮮項目測試 226
10.4 習(xí)題及實驗 227
第2部分 實戰(zhàn)篇
第11章 核酸采集平臺:功能分析與設(shè)計 231
11.1 需求分析 231
11.2 系統(tǒng)設(shè)計 232
11.2.1 邏輯架構(gòu) 232
11.2.2 技術(shù)架構(gòu) 233
11.2.3 數(shù)據(jù)架構(gòu) 234
11.3 任務(wù)分工 235
第12章 核酸采集平臺:后端項目 236
12.1 后端項目環(huán)境搭建 236
12.2 后端項目目錄結(jié)構(gòu) 236
12.3 后端項目代碼實現(xiàn) 238
12.3.1 主文件 238
12.3.2 配置文件 239
12.3.3 數(shù)據(jù)庫引擎 239
12.3.4 登錄認(rèn)證模塊 240
12.3.5 預(yù)約模塊 244
12.3.6 登記模塊 247
12.3.7 運行后端項目 250
12.4 后端項目部署 253
12.4.1 準(zhǔn)備服務(wù)器環(huán)境 254
12.4.2 安裝數(shù)據(jù)庫環(huán)境 254
12.4.3 安裝Python環(huán)境 255
12.4.4 上傳項目文件 255
12.4.5 安裝第三方庫 255
12.4.6 部署為后臺進程 256
12.4.7 驗證部署環(huán)境 256
第13章 核酸采集平臺:前端項目 262
13.1 前端開發(fā)環(huán)境搭建 262
13.2 管理端項目目錄結(jié)構(gòu) 262
13.3 管理端項目代碼實現(xiàn) 263
13.4 管理端項目運行與發(fā)布 270
13.5 移動端項目目錄結(jié)構(gòu) 272
13.6 移動端項目代碼實現(xiàn) 273
13.7 移動端運行與發(fā)布 275
附錄A 在Win 10上安裝MySQL數(shù)據(jù)庫 277
附錄B Vue.js使用介紹 290
附錄C 附贈代碼清單 309
后記 314