FastAPI是一個Web框架,可用于Python 3.6及其更高版本構(gòu)建API。有了這本書,您將能夠使用實際示例創(chuàng)建快速可靠的數(shù)據(jù)科學API后端。
本書從FastAPI框架的基礎(chǔ)知識和相關(guān)的Python編程概念開始講解。然后,您將了解該框架的所有方面知識,包括其強大的依賴注入系統(tǒng),以及如何使用它與數(shù)據(jù)庫通信、實現(xiàn)身份驗證和集成機器學習模型等。之后,您將學習與測試和部署相關(guān)的實踐,以運行高質(zhì)量和健壯的應用程序。后,您還將學習Python數(shù)據(jù)科學軟件包的應用生態(tài)系統(tǒng)。隨著學習的深入,您將學習如何使用FastAPI在Python中構(gòu)建數(shù)據(jù)科學應用程序。本書還演示了如何開發(fā)快速高效的機器學習預測后端,并對其進行測試,以獲得性能。后,您將看到如何使用WebSocket和Web瀏覽器作為客戶端實現(xiàn)人臉實時檢測。
在本書的后,您不僅學習如何在數(shù)據(jù)科學項目中實現(xiàn)Python,還學習如何在FastAPI的幫助下維護和設(shè)計它們,以滿足高編程標準。
讀者對象
本書面向?qū)astAPI及其生態(tài)系統(tǒng)感興趣的數(shù)據(jù)科學家和軟件開發(fā)人員,并以此構(gòu)建數(shù)據(jù)科學應用程序。讀者需要具備數(shù)據(jù)科學和機器學習概念的基本知識,以及了解如何在Python中應用它們。
本書主要內(nèi)容
第1章為Python開發(fā)環(huán)境設(shè)置,介紹了Python開發(fā)環(huán)境的搭建,以便后續(xù)開始使用Python和FastAPI。這其中就包含Python常用的各種開發(fā)工具。
第2章為Python編程特性,介紹了Python編程的特殊性,特別是塊縮進、控制流語句、異常處理和面向?qū)ο缶幊痰,以及列表解析和生成器等功能。后,介紹了類型提示和異步I/O是如何工作的。
第3章為使用FastAPI開發(fā)RESTful API,介紹了使用FastAPI創(chuàng)建RESTful API的基礎(chǔ)知識:路由、參數(shù)、請求主體驗證和響應,還展示了如何使用專用模塊和單獨的路由器正確構(gòu)建FastAPI項目。
第4章為在FastAPI中管理Pydantic數(shù)據(jù)模型。Pydantic是FastAPI使用的底層數(shù)據(jù)驗證庫,本章詳細介紹了使用Pydantic定義數(shù)據(jù)模型。由于類繼承,解釋了如何在不重復相同代碼的情況下實現(xiàn)相同模型的變體。后,展示了如何在這些模型上實現(xiàn)自定義數(shù)據(jù)驗證邏輯。
第5章為FastAPI中的依賴注入,解釋了依賴注入是如何工作的,以及如何定義自己的依賴,以便在不同的路由器和端點之間重用邏輯。
第6章為數(shù)據(jù)庫和異步ORM,演示了如何建立與數(shù)據(jù)庫的連接以讀取和寫入數(shù)據(jù),介紹如何使用兩個庫與SQL數(shù)據(jù)庫異步工作,以及它們?nèi)绾闻cPydantic模型交互。后,向您展示如何使用NoSQL數(shù)據(jù)庫中的MongoDB。
第7章為FastAPI中的管理認證和安全性,展示了如何實現(xiàn)一個基本的管理認證系統(tǒng),這主要包括保護我們的API端點,并為經(jīng)過管理認證的用戶返回相關(guān)數(shù)據(jù)。另外,還討論了CORS的實踐,以及如何避免CSRF攻擊。
第8章在是為FastAPI中為雙向交互通信定義WebSocket,幫助我們更好地理解WebSocket,以及如何創(chuàng)建WebSocket和處理通過FastAPI接收的消息。
第9章為使用pytest和HTTPX異步測試API,展示了如何為REST API端點編寫測試。
第10章為部署FastAPI項目,介紹了在實際項目中順利運行FastAPI應用程序的常見配置。另外,還探討了幾個部署選項:DigitalOcean應用程序平臺、Docker和傳統(tǒng)的服務器設(shè)置。
第11章為NumPy和pandas簡介,介紹了Python中用于數(shù)據(jù)科學的兩個核心庫:NumPy和pandas。我們了解了如何使用NumPy創(chuàng)建和操作數(shù)組,以及如何對它們進行高效操作,然后展示了如何使用pandas管理大型數(shù)據(jù)集。
第12章為使用scikitlearn訓練機器學習模型,scikitlearn庫是一套可以在Python中執(zhí)行機器學習任務的現(xiàn)成工具,本章同時講解了機器學習,包含一些常見的算法和訓練預測模型。
第13章為使用FastAPI創(chuàng)建高效的預測API端點,展示了如何使用Joblib高效地存儲經(jīng)過訓練的機器學習模型;然后,將它集成到一個FastAPI后端,并且考慮了FastAPI內(nèi)部的一些技術(shù)細節(jié),以實現(xiàn)的性能;后,展示了一種使用Joblib緩存結(jié)果的方法。
前言Python FastAPI構(gòu)建數(shù)據(jù)科學應用第14章為使用帶FastAPI和OpenCV的WebSocket實現(xiàn)人臉實時檢測系統(tǒng),實現(xiàn)了一個在瀏覽器中執(zhí)行人臉檢測的簡單應用程序,由FastAPI WebSocket和OpenCV支持,OpenCV是一個流行的計算機視覺庫。
準備工作
在本書中,我們將主要使用Python編程語言。第1章解釋如何在操作系統(tǒng)上設(shè)置適當?shù)腜ython環(huán)境。一些例子還涉及使用JavaScript運行網(wǎng)頁,因此您的操作系統(tǒng)需要安裝Chrome或Mozilla Firefox瀏覽器。
軟件需求操作系統(tǒng)需求Python 3.7及以上版本W(wǎng)indows,macOS 或者LinuxJavaScriptWindows,macOS 或者Linux
示例代碼下載
本書的示例代碼可以從https://github.com/PacktPublishing/BuildingDataScienceApplicationswithFastAPI下載,同時相關(guān)更新也可從本網(wǎng)址下載。
彩色圖片下載
本書所涉及的彩色圖片和表格,可從https://static.packtcdn.com/downloads/9781801079211_ColorImages.pdf下載。
第1章 快速入門:基礎(chǔ)知識 / 1
部分Python和FastAPI 概述
第1章Python開發(fā)環(huán)境設(shè)置3
1.1技術(shù)要求3
1.2使用pyenv安裝Python發(fā)行版3
1.3創(chuàng)建Python虛擬環(huán)境5
1.4使用pip安裝Python包7
1.5安裝HTTPie命令行實用程序7
1.6總結(jié)9
第2章Python 編程特性10
2.1技術(shù)要求10
2.2Python編程基礎(chǔ)10
2.2.1運行Python腳本11
2.2.2縮進問題12
2.2.3使用內(nèi)置的類型13
2.2.4使用數(shù)據(jù)結(jié)構(gòu):列表、元組、字典和集合13
2.2.5執(zhí)行布爾邏輯并檢查是否存在17
2.2.6程序控制流19
2.2.7定義函數(shù)21
2.2.8編寫及使用包和模塊23
2.3列表解析和生成器25
2.3.1列表解析25
2.3.2生成器27
2.4編寫面向?qū)ο蟮某绦?8
2.4.1定義類29
2.4.2實現(xiàn)魔法函數(shù)30
2.4.3重用邏輯并使用繼承避免重復33
2.5使用mypy進行類型提示和類型檢查36
2.5.1開始36
2.5.2typing模塊37
2.5.3可調(diào)用的類型函數(shù)簽名39
2.5.4Ang和cast40
2.6異步I/O41
2.7總結(jié)44
第3章使用FastAPI開發(fā)RESTful API45
3.1技術(shù)要求45
3.2創(chuàng)建個端點并在本地運行45
3.3處理請求參數(shù)48
3.3.1路徑參數(shù)48
3.3.2查詢參數(shù)53
3.3.3主體數(shù)據(jù)54
3.3.4表單數(shù)據(jù)和文件上傳58
3.3.5Header和Cookie62
3.3.6請求對象64
3.4自定義響應65
3.4.1路徑操作參數(shù)65
3.4.2響應參數(shù)69
3.4.3引發(fā)HTTP錯誤73
3.4.4構(gòu)建自定義響應75
3.5使用多個路由器構(gòu)建一個更大的項目78
3.6總結(jié)81
目錄Python FastAPI構(gòu)建數(shù)據(jù)科學應用第4章在FastAPI中管理Pydantic數(shù)據(jù)模型82
4.1技術(shù)要求82
4.2使用Pydantic定義模型及字段類型82
4.2.1標準字段類型83
4.2.2可選字段和默認值87
4.2.3字段驗證88
4.2.4動態(tài)默認值89
4.2.5使用Pydantic類型驗證郵件地址和URL90
4.3使用類繼承創(chuàng)建模型變量92
4.4使用Pydantic添加自定義數(shù)據(jù)驗證94
4.4.1在字段級別上應用驗證94
4.4.2在對象級別上應用驗證95
4.4.3在Pydantic解析之前應用驗證96
4.5使用Pydantic對象96
4.5.1將對象轉(zhuǎn)換為字典97
4.5.2從子類對象創(chuàng)建實例98
4.5.3使用部分實例更新一個實例100
4.6總結(jié)101
第5章FastAPI中的依賴注入102
5.1技術(shù)要求102
5.2什么是依賴注入102
5.3創(chuàng)建和使用函數(shù)依賴項103
5.4創(chuàng)建和使用具有類的參數(shù)化依賴項107
5.5在路徑、路由器和全局級別使用依賴項110
5.5.1在路徑裝飾器上使用依賴項110
5.5.2在整個路由器上使用依賴項111
5.5.3對整個應用程序使用依賴項112
5.6總結(jié)114
第二部分使用FastAPI構(gòu)建和部署完整的Web后端
第6章數(shù)據(jù)庫和異步ORM117
6.1技術(shù)要求117
6.2關(guān)系數(shù)據(jù)庫和NoSQL數(shù)據(jù)庫118
6.2.1關(guān)系數(shù)據(jù)庫118
6.2.2NoSQL數(shù)據(jù)庫119
6.2.3選擇數(shù)據(jù)庫120
6.3使用SQLAlchemy與SQL數(shù)據(jù)庫通信121
6.3.1創(chuàng)建表架構(gòu)122
6.3.2連接到數(shù)據(jù)庫123
6.3.3進行插入查詢124
6.3.4進行選擇查詢125
6.3.5進行更新和刪除查詢127
6.3.6添加關(guān)系128
6.3.7用Alembic建立數(shù)據(jù)庫遷移系統(tǒng)131
6.4使用Tortoise ORM與SQL數(shù)據(jù)庫通信135
6.4.1創(chuàng)建數(shù)據(jù)庫模型135
6.4.2設(shè)置Tortoise引擎137
6.4.3創(chuàng)建對象138
6.4.4獲取和過濾對象139
6.4.5更新和刪除對象140
6.4.6添加關(guān)系141
6.4.7用Aerich建立數(shù)據(jù)庫遷移系統(tǒng)144
6.5使用Motor與MongoDB數(shù)據(jù)庫通信146
6.5.1創(chuàng)建與MongoDB ID兼容的模型146
6.5.2連接到數(shù)據(jù)庫147
6.5.3插入文檔148
6.5.4獲取文件149
6.5.5更新和刪除文檔151
6.5.6嵌套文檔152
6.6總結(jié)153
第7章FastAPI中的管理認證與安全性154
7.1技術(shù)要求154
7.2FastAPI中的安全依賴關(guān)系154
7.3在數(shù)據(jù)庫中安全地存儲用戶及其密碼157
7.3.1創(chuàng)建模型和表158
7.3.2哈希密碼159
7.3.3實施注冊路線159
7.4檢索用戶并生成訪問令牌160
7.4.1實現(xiàn)數(shù)據(jù)庫訪問令牌(access token)160
7.4.2實現(xiàn)登錄端點161
7.5使用訪問令牌保護端點164
7.6配置CORS并防止CSRF攻擊165
7.6.1在FastAPI中進行配置CORS166
7.6.2實現(xiàn)doublesubmit Cookie以防止CSRF攻擊171
7.7總結(jié)175
第8章在FastAPI中為雙向交互通信定義WebSocket176
8.1技術(shù)要求176
8.2了解使用WebSocket進行雙向通信的原理177
8.3使用FastAPI創(chuàng)建WebSocket177
8.3.1處理并發(fā)性180
8.3.2使用依賴項182
8.4處理多個WebSocket連接和廣播消息184
8.5總結(jié)190
第9章使用pytest和HTTPX異步測試API191
9.1技術(shù)要求191
9.2使用pytest進行單元測試192
9.2.1使用參數(shù)生成測試194
9.2.2通過創(chuàng)建fixture重用測試邏輯195
9.3使用HTTPX為FastAPI設(shè)置測試工具198
9.4為REST API端點編寫測試201
9.4.1為POST端點編寫測試202
9.4.2使用數(shù)據(jù)庫進行測試203
9.5為WebSocket端點編寫測試209
9.6總結(jié)211
第10章部署FastAPI項目213
10.1技術(shù)要求213
10.2設(shè)置和使用環(huán)境變量213
10.3管理Python依賴項217
10.4在無服務器平臺上部署FastAPI應用程序220
10.5使用Docker部署FastAPI應用程序223
10.5.1編寫Dockerfile223
10.5.2構(gòu)建Docker映像225
10.5.3在本地運行Docker映像225
10.5.4部署Docker映像226
10.6在傳統(tǒng)服務器上部署FastAPI應用程序227
10.7總結(jié)228
第三部分使用Python和FastAPI構(gòu)建數(shù)據(jù)科學API
第11章NumPy和pandas簡介231
11.1技術(shù)要求231
11.2NumPy入門231
11.2.1創(chuàng)建數(shù)組232
11.2.2訪問元素和子數(shù)組234
11.3使用NumPy操作數(shù)組:計算、聚合、比較236
11.3.1數(shù)組的加法和乘法238
11.3.2聚合數(shù)組:總和、小值、值、平均值等239
11.3.3數(shù)組比較239
11.4pandas入門240
11.4.1使用pandas Series獲取一維數(shù)據(jù)240
11.4.2使用pandas DataFrame獲取多維數(shù)據(jù)242
11.4.3導入和導出CSV數(shù)據(jù)244
11.5總結(jié)245
第12章使用scikitlearn訓練機器學習模型246
12.1技術(shù)要求246
12.2什么是機器學習246
12.2.1監(jiān)督學習與無監(jiān)督學習247
12.2.2模型驗證247
12.3scikitlearn的基礎(chǔ)知識249
12.3.1訓練模型和預測249
12.3.2使用pipeline鏈接預處理器和估計器251
12.3.3通過交叉驗證驗證模型255
12.4使用樸素貝葉斯模型對數(shù)據(jù)進行分類255
12.4.1原理256
12.4.2使用高斯樸素貝葉斯對數(shù)據(jù)進行分類256
12.4.3使用多項式樸素貝葉斯對數(shù)據(jù)進行分類259
12.5使用支持向量機對數(shù)據(jù)進行分類260
12.5.1原理260
12.5.2支持向量機在scikitlearn中的應用262
12.5.3查找參數(shù)263
12.6總結(jié)265
第13章使用FastAPI創(chuàng)建高效的預測API端點266
13.1技術(shù)要求266
13.2使用Joblib持久化經(jīng)過訓練的模型266
13.2.1拋棄已訓練的模型267
13.2.2加載轉(zhuǎn)儲模型268
13.3實現(xiàn)高效的預測端點269
13.4使用Joblib緩存結(jié)果271
13.5總結(jié)275
第14章使用帶FastAPI和OpenCV的WebSockets實現(xiàn)人臉實時檢測系統(tǒng)277
14.1技術(shù)要求277
14.2OpenCV入門277
14.3實現(xiàn)HTTP端點以對單個圖像執(zhí)行人臉檢測280
14.4實現(xiàn)WebSocket以對圖像流執(zhí)行人臉檢測282
14.5在WebSocket中從瀏覽器發(fā)送圖像流284
14.6在瀏覽器中顯示人臉檢測結(jié)果287
14.7總結(jié)290