本書涵蓋了以下內(nèi)容:怎樣使用FastAPI構(gòu)建Web應(yīng)用程序。FastAPI、Starlette與 Pydantic之間的區(qū)別及聯(lián)系。讓FastAPI框架與眾不同的兩項(xiàng)性,也就是對(duì)異步函數(shù)的支持,以及數(shù)據(jù)類型的檢測(cè)及驗(yàn)證機(jī)制。Python 3.8及后續(xù)版本所支持的新功能,尤其是類型注解機(jī)制。同步Python代碼與異步Python代碼之間的區(qū)別。怎樣與外部的API及服務(wù)相連接。
編輯推薦
FastAPI是個(gè)年輕而穩(wěn)健的框架,它設(shè)計(jì)得相當(dāng)清晰,并且利用了Python語(yǔ)言中的一些新性。正如其名稱所示,這個(gè)框架的速度確實(shí)快,能夠與采用Go語(yǔ)言所編寫的框架相爭(zhēng)。熟悉Python語(yǔ)言的開發(fā)者能夠通過(guò)這本實(shí)用教程,學(xué)到如何運(yùn)用FastAPI框架,以盡可能少的代碼迅速開發(fā)出Web應(yīng)用。
本書作者描述了FastAPI開發(fā)中的諸多細(xì)節(jié),并通過(guò)各種示例,講解了表單、數(shù)據(jù)庫(kù)訪問(wèn)、圖表與地圖制作等高級(jí)話題。這本書能夠幫助你迅速了解RESTful API、數(shù)據(jù)驗(yàn)證、授權(quán),以及性能優(yōu)化等技術(shù)。FastAPI與Flask及Django框架類似,用過(guò)那兩種框架的讀者很容易就能學(xué)會(huì)FastAPI。
專家推薦
這本書讓你輕松學(xué)會(huì)FastAPI。作者熟練地演示了這個(gè)框架的用法,讓家很容易就能理解FastAPI的一些概念。你可以將書里的實(shí)用知識(shí),立刻運(yùn)用到實(shí)際的編程中。
Ganesh Harke,
花旗銀行(Citibank)的高級(jí)軟件工程師
這本書詳細(xì)講解了FastAPI框架及其周邊產(chǎn)品,讓讀者迅速而全面地掌握如何用這套技術(shù)做Web開發(fā)。
William Jamir Silva,
Adjust GmbH 的高級(jí)軟件工程師
前言這是一本關(guān)于FastAPI 的實(shí)用教程,告訴家如何使用這款當(dāng)代的Web 框架,以當(dāng)代的Python 語(yǔ)言來(lái)做開發(fā)。另外,你也可以將這本書當(dāng)成一個(gè)故事,你會(huì)看到我們?nèi)绾螌⒆约核龅降钠婷钗锛儞Q成有用的工具。雖說(shuō)沒(méi)有銀色的子彈(No silver bullet,相當(dāng)于沒(méi)有靈丹妙藥),可要是真的遇到了狼人,還就是得靠它才行(提前說(shuō)一下,我們后面確實(shí)會(huì)碰到狼人)。筆者從1970 年代中期,開始編寫科學(xué)應(yīng)用程序。1977 年,第一次在PDP-11計(jì)算機(jī)上面,接觸到了UNIX 操作系統(tǒng)以及C 語(yǔ)言,我當(dāng)時(shí)感覺(jué)到,像UNIX這樣的系統(tǒng),以后應(yīng)該會(huì)流行起來(lái)。1980 年代與1990 年代初,互聯(lián)網(wǎng)還沒(méi)有呈現(xiàn)出今天的規(guī)模,但那個(gè)時(shí)候,已經(jīng)有了許多很棒的免費(fèi)軟件與技術(shù)信息。1993 年的互聯(lián)網(wǎng),處在剛剛起步的階段,那時(shí)出現(xiàn)了一款叫作Mosaic 的網(wǎng)頁(yè)瀏覽器,我當(dāng)時(shí)感覺(jué)到,像Mosaic 這樣的瀏覽器,以后應(yīng)該會(huì)流行起來(lái)。幾年后,筆者成立了一間做Web 開發(fā)的公司,當(dāng)時(shí)的開發(fā)工具,就是老生常談的那幾樣,也就是PHP、HTML 與Perl。過(guò)了幾年,我們接到一個(gè)合約項(xiàng)目,直到那時(shí),我才開始試用Python,它竟然能夠如此迅速地訪問(wèn)、操縱并顯示數(shù)據(jù),這很令我贊嘆。我只拿了兩個(gè)星期的空閑時(shí)間,就把一款需要四位開發(fā)者用一年才寫好的C 程序,以Python 語(yǔ)言重制了一遍。當(dāng)時(shí)我感覺(jué)到,像Python 這樣的編程語(yǔ)言,以后應(yīng)該會(huì)流行起來(lái)。從此以后,筆者的多數(shù)工作,用的就是Python 語(yǔ)言以及針對(duì)這門語(yǔ)言的Web框架了,這主要是指Flask 與Django。我尤其喜歡簡(jiǎn)潔的Flask,所以在許多任務(wù)里面,都采用它來(lái)做開發(fā)。但是,我在幾年前發(fā)現(xiàn)了一個(gè)寶藏,這是一種新的Web 框架,叫作FastAPI,它是由Sebastián Ramírez 編寫的。筆者閱讀了FastAPI 的文檔,其中提到的設(shè)計(jì)思路與設(shè)計(jì)理念,給我留下了深刻印象(文檔寫得很棒,家可以去這里查閱:https://fastapi.tiangolo.com)。尤其是那個(gè)介紹開發(fā)歷史的頁(yè)面(https://oreil.ly/Ds-xM),讓我體會(huì)到,他是在很謹(jǐn)慎地評(píng)估了與FastAPI 同類的方案之后,才決定建立這樣一個(gè)新框架的。這不是一個(gè)自說(shuō)自話的項(xiàng)目,也不是一個(gè)隨便玩玩的東西,而是一套能夠認(rèn)真解決現(xiàn)實(shí)開發(fā)問(wèn)題的框架。所以,當(dāng)時(shí)我感覺(jué)到,像FastAPI 這樣的框架,以后應(yīng)該會(huì)流行起來(lái)。我用FastAPI 做了一套生物醫(yī)學(xué)方面的API,由于效果不錯(cuò),因此我們?cè)诘诙杲M織了一個(gè)團(tuán)隊(duì),把以前的核心API,用FastAPI 重寫了一遍。重寫之后的API 目前仍在使用,而且運(yùn)作得很好。我們?cè)谀谴沃貙懼蝎@得的經(jīng)驗(yàn),家都會(huì)在這本書里面看到,我們當(dāng)時(shí)都認(rèn)為,重寫之后的代碼比以前好,它的速度更快,bug 也更少。值得一提的是,那個(gè)團(tuán)隊(duì)里面的一些人,根本就沒(méi)有用過(guò)Python,而且在所有的人里面,我是唯一一個(gè)用過(guò)FastAPI 的。所以,當(dāng)筆者有機(jī)會(huì)給《Introducing Python》一書寫后續(xù)作品時(shí),我向出版方OReilly 建議的首選話題,就是FastAPI。筆者認(rèn)為,F(xiàn)astAPI 的影響力至少跟Flask 與Django 持平,甚至有可能更。剛才說(shuō)過(guò),F(xiàn)astAPI 網(wǎng)站本身,已經(jīng)提供了一流的文檔,而且詳細(xì)講述了與Web 開發(fā)有關(guān)的常見話題,例如數(shù)據(jù)庫(kù)、認(rèn)證、部署等。既然如此,為什么還要寫這樣的一本書呢?這是因?yàn),這不是一本把已經(jīng)有人講過(guò)的那些知識(shí),給全部重講一遍的書,那樣的書太累人了。這是一本為了有用而寫的書,它要幫助你迅速掌握FastAPI的主要概念,并加以運(yùn)用。我會(huì)把值得家去研究的技術(shù)指出來(lái),還會(huì)針對(duì)日常的開發(fā)任務(wù)給出建議。書里的每一章,都會(huì)用一個(gè)預(yù)覽(也就是內(nèi)容提要)來(lái)開頭。然后,筆者會(huì)詳細(xì)講述這一章的話題,當(dāng)然也會(huì)偶爾跑個(gè)題。最后,會(huì)用一個(gè)回顧(也就是小結(jié))來(lái)概括全章。雖然觀點(diǎn)應(yīng)該建立在事實(shí)之上,但老話說(shuō)得好,事實(shí)本身也是有觀點(diǎn)的(These are the opinions on which my facts are based)。所以,筆者在書里講的內(nèi)容,可能與每位讀者的具體經(jīng)歷有所出入,但我還是希望這些內(nèi)容,能夠給家提供足夠的幫助,讓你成為一位更有效率的Web 開發(fā)者。排版約定本書采用以下排版約定。斜體(Italic)表示新術(shù)語(yǔ)、URL、電子郵件地址、文件名和文件擴(kuò)展名。等寬字體(Constant width)表示程序清單,在段落內(nèi)表示程序元素,例如變量、函數(shù)名稱、數(shù)據(jù)庫(kù)、數(shù)據(jù)類型、環(huán)境變量、語(yǔ)句和關(guān)鍵字。粗體等寬字體(Constant width bold)表示應(yīng)由用戶原封不動(dòng)輸入的命令或其他文本。斜體等寬字體(Constant width italic)表示應(yīng)該替換成用戶提供值的文本,或者由上下文決定的值。表示提示或建議。表示一般性說(shuō)明。如何使用示例代碼本書的補(bǔ)充材料( 例如示例代碼、習(xí)題等), 可以從https://github.com/madscheme/fastapi 下載。如果有技術(shù)問(wèn)題或是在使用示例代碼時(shí)遇到困難,請(qǐng)發(fā)電子郵件至support@oreilly.com。本書是要幫你完成工作的。一般來(lái)說(shuō),如果本書提供了示例代碼,你可以把它用在你的程序或文檔中。除非你使用了很一部分代碼,否則無(wú)需聯(lián)系我們獲得許可。比如,用本書的幾個(gè)代碼片段寫一個(gè)程序就無(wú)需獲得許可,銷售或分發(fā)OReilly 圖書的示例集則需要獲得許可;引用本書中的示例代碼回答問(wèn)題無(wú)需獲得許可,將書中量的代碼放到你的產(chǎn)品文檔中則需要獲得許可。我們很希望但并不強(qiáng)制要求你在引用本書內(nèi)容時(shí)加上引用說(shuō)明。引用說(shuō)明一般包括書名、作者、出版社和ISBN,例如:FastAPI by Bill Lubanovic (OReilly).Copyright 2024 Bill Lubanovic, 978-1-098-13550-8。如果你覺(jué)得自己對(duì)示例代碼的使用超出了上述許可范圍,請(qǐng)通過(guò)permissions@oreilly.com 與我們聯(lián)系。OReilly 在線學(xué)習(xí)平臺(tái)(OReilly Online Learning)近40 年來(lái),OReilly Media 致力于提供技術(shù)和商業(yè)培訓(xùn)、知識(shí)和卓越見解,來(lái)幫助眾多公司取得成功。公司獨(dú)有的專家和改革創(chuàng)新者網(wǎng)絡(luò)通過(guò)OReilly 書籍、文章以及在線學(xué)習(xí)平臺(tái),分享他們的專業(yè)知識(shí)和實(shí)踐經(jīng)驗(yàn)。OReilly 在線學(xué)習(xí)平臺(tái)按照您的需要提供實(shí)時(shí)培訓(xùn)課程、深入學(xué)習(xí)渠道、交互式編程環(huán)境以及來(lái)自O(shè)Reilly 和其他200 多家出版商的量書籍與視頻資料。更多信息,請(qǐng)?jiān)L問(wèn)網(wǎng)站:https://www.oreilly.com/。聯(lián)系我們?nèi)魏斡嘘P(guān)本書的意見或疑問(wèn),請(qǐng)按照以下地址聯(lián)系出版社。美國(guó):OReilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中國(guó):北京市西城區(qū)西直門南街2 號(hào)成銘廈C 座807 室(100035)奧萊利技術(shù)咨詢(北京)有限公司這本書在OReilly 網(wǎng)站上面有相應(yīng)的網(wǎng)頁(yè),其中包含勘誤表、示例代碼,以及其他一些附加信息。這個(gè)頁(yè)面的網(wǎng)址是:https://oreil.ly/FastAPI。有勘誤內(nèi)容請(qǐng)反饋給:errata@oreilly.com.cn。與我們的書籍和課程有關(guān)的新聞及信息,參見https://oreilly.com 網(wǎng)站。我們的LinkedIn:https://linkedin.com/company/oreilly-media。我們的Twitter:https://twitter.com/oreillymedia。我們的YouTube:https://youtube.com/oreillymedia。致謝筆者要感謝自己在許多地方遇到的許多位朋友,是你們讓我獲益良多:? Serra High School(Serra 中學(xué))? The University of Pittsburgh(匹茲堡學(xué))? The Chronobiology Laboratories, University of Minnesota(明尼蘇達(dá)學(xué)時(shí)間生物學(xué)實(shí)驗(yàn)室)? Intran? Crosfield-Dicomed? Northwest Airlines(西北航空)? Tela? WAM!NET? Mad Scheme? SSESCO 公司? Intradyn 公司? Keep? Thomson Reuters(湯森路透)? Cray 公司? Penguin Computing 公司? Internet Archive(互聯(lián)網(wǎng)檔案館)? CrowdStrike 公司? Flywheel
Bill Lubanovic擁有四十多年的開發(fā)經(jīng)驗(yàn),精通Linux系統(tǒng)、Web開發(fā),以及Python語(yǔ)言。他最Z近與同事采用FastAPI重寫了一套做生物醫(yī)學(xué)研究的型API。Bill是OReilly出版的《Linux System Administration》一書的合著者,他還撰寫了OReilly的《Introducing Python》。
目錄
前言 1
第一部分 新知識(shí)介紹
第1 章 當(dāng)代的Web . 11
1.1 預(yù)覽 . 11
1.2 服務(wù)與API 12
1.2.1 API 的類型 .12
1.2.2 HTTP .14
1.2.3 REST(RESTful) .14
1.2.4 JSON 與API 數(shù)據(jù)格式.17
1.2.5 JSON:API 17
1.2.6 GraphQL 17
1.3 并發(fā) .18
1.4 分層 .19
1.5 數(shù)據(jù) .25
1.6 小結(jié) .25
第2 章 當(dāng)代的Python 27
2.1 預(yù)覽 .27
2.2 工具 .27
2.3 Python 入門 .28
2.3.1 Python 語(yǔ)言本身 .29
2.3.2 Python 語(yǔ)言的軟件包管理機(jī)制 30
2.3.3 虛擬環(huán)境 .30
2.3.4 Poetry 31
2.3.5 源代碼的格式 32
2.3.6 測(cè)試 32
2.3.7 源代碼控制與持續(xù)集成 33
2.3.8 Web 開發(fā)工具 33
2.4 API 與服務(wù) 34
2.5 變量只不過(guò)是個(gè)名字 34
2.6 類型提示36
2.7 數(shù)據(jù)結(jié)構(gòu)37
2.8 Web 框架 37
2.8.1 Django 37
2.8.2 Flask 38
2.8.3 FastAPI.38
2.9 小結(jié) .39
第二部分 FastAPI 導(dǎo)覽
第3 章 FastAPI 簡(jiǎn)介 43
3.1 預(yù)覽 .43
3.2 什么是FastAPI 43
3.3 FastAPI 應(yīng)用程序 .44
3.4 處理HTTP 請(qǐng)求 50
3.4.1 通過(guò)URL 路徑傳遞參數(shù) .51
3.4.2 通過(guò)查詢字符串傳遞參數(shù) 53
3.4.3 通過(guò)請(qǐng)求體傳遞參數(shù).55
3.4.4 通過(guò)Header 傳遞參數(shù) 57
3.4.5 通過(guò)多種方式獲取HTTP 請(qǐng)求之中的數(shù)據(jù) 59
3.4.6 用哪一種方式獲取數(shù)據(jù)最好 .59
3.5 給出HTTP 響應(yīng) 59
3.5.1 狀態(tài)碼 60
3.5.2 Header 61
3.5.3 HTTP 響應(yīng)的類型 61
3.5.4 類型轉(zhuǎn)換 .62
3.5.5 通過(guò)response_model 返回另一種數(shù)據(jù)模型 63
3.6 自動(dòng)化的文檔 .66
3.7 如何處理更為復(fù)雜的數(shù)據(jù) 69
3.8 小結(jié) .69
第4 章 異步、并發(fā)與Starlette 簡(jiǎn)介 .71
4.1 預(yù)覽 .71
4.2 Starlette .71
4.3 并發(fā)的類型 72
4.3.1 分布式計(jì)算與并行計(jì)算 73
4.3.2 操作系統(tǒng)級(jí)別的進(jìn)程.73
4.3.3 操作系統(tǒng)級(jí)別的線程.74
4.3.4 綠色線程 .74
4.3.5 回調(diào) 75
4.3.6 Python 生成器 75
4.3.7 Python 的async、await 關(guān)鍵字與asyncio 庫(kù) 77
4.4 FastAPI 與異步開發(fā) 79
4.5 直接使用Starlette 做Web 開發(fā) .82
4.6 插曲:清理Clue House .83
4.7 小結(jié) .85
第5 章 Pydantic、類型提示與數(shù)據(jù)模型簡(jiǎn)介 . 87
5.1 預(yù)覽 .87
5.2 類型提示87
5.3 給數(shù)據(jù)歸組 91
5.4 其他一些數(shù)據(jù)歸組方案 .97
5.5 一個(gè)簡(jiǎn)單的示例 99
5.6 對(duì)類型做驗(yàn)證 103
5.7 對(duì)取值做出驗(yàn)證 .104
5.8 小結(jié) 107
第6 章 描述依賴關(guān)系 109
6.1 預(yù)覽 109
6.2 什么是依賴 .109
6.3 由依賴導(dǎo)致的問(wèn)題 . 110
6.4 依賴注入. 111
6.5 FastAPI 的依賴注入 . 111
6.6 在FastAPI 代碼里面描述依賴關(guān)系 112
6.7 依賴關(guān)系的作用范圍 113
6.7.1 為單個(gè)的路徑函數(shù)指定依賴關(guān)系 . 113
6.7.2 為多條路徑指定同一種依賴關(guān)系 . 115
6.7.3 為整個(gè)應(yīng)用程序指定依賴關(guān)系 116
6.8 小結(jié) 116
第7 章 各種Web 框架之間的對(duì)比 117
7.1 預(yù)覽 117
7.2 Flask 與FastAPI 的異同 . 118
7.2.1 處理URL 之中的參數(shù) 118
7.2.2 處理查詢字符串之中的參數(shù) 120
7.2.3 處理請(qǐng)求體之中的參數(shù) .120
7.2.4 處理標(biāo)頭之中的參數(shù)121
7.3 Django 框架與Flask 及FastAPI 的異同 .122
7.4 這三種Web 開發(fā)框架在其他方面的性對(duì)比 123
7.5 這三個(gè)框架在數(shù)據(jù)庫(kù)方面的異同 124
7.6 如何在這三種框架之間選擇 .125
7.7 其他一些Python Web 框架 125
7.8 小結(jié) 126
第三部分 制作網(wǎng)站
第8 章 Web 層 129
8.1 預(yù)覽 129
8.2 插曲:從上到下、從下到上,還是從內(nèi)到外 130
8.3 REST 式的設(shè)計(jì) 132
8.4 網(wǎng)站的文件與目錄布局 134
8.5 網(wǎng)站的第一版代碼 .137
8.6 處理HTTP 請(qǐng)求 .140
8.7 在頂級(jí)app 下面添加多個(gè)次一級(jí)的subrouter .142
8.8 構(gòu)建Web 層 143
8.9 定義數(shù)據(jù)模型 143
8.10 Stub Data 與Fake Data .144
8.11 先確定一些常見的操作 144
8.12 建立Fake Data .145
8.13 開始測(cè)試 151
8.14 利用FastAPI 自動(dòng)生成的測(cè)試表單作測(cè)試 .152
8.15 Web 層應(yīng)該通過(guò)Service 層做中介,而不應(yīng)直接與Data 層通信 155
8.16 分頁(yè)與排序 .156
8.17 小結(jié) 158
第9 章 Service 層 . 159
9.1 預(yù)覽 159
9.2 如何確定網(wǎng)站所應(yīng)提供的服務(wù) 159
9.3 網(wǎng)站的文件布局 .160
9.4 確保網(wǎng)站安全 161
9.5 實(shí)現(xiàn)Service 層中的各種函數(shù)161
9.6 測(cè)試 163
9.7 Service 層的其他事務(wù) 165
9.7.1 日志記錄 166
9.7.2 指標(biāo)測(cè)量、監(jiān)控、可觀測(cè)性 166
9.7.3 追蹤 .167
9.7.4 雜項(xiàng) .167
9.8 小結(jié) 168
第10 章 Data 層 . 169
10.1 預(yù)覽 169
10.2 DB-API .169
10.3 SQLite 172
10.4 網(wǎng)站的文件布局 174
10.5 讓網(wǎng)站運(yùn)作起來(lái) 175
10.6 測(cè)試 181
10.6.1 全面測(cè)試 182
10.6.2 單元測(cè)試 193
10.7 小結(jié) 196
第11 章 認(rèn)證與授權(quán) 197
11.1 預(yù)覽 197
11.2 又得跑個(gè)題:我們真的需要做認(rèn)證嗎 198
11.3 認(rèn)證方式 199
11.4 全局認(rèn)證:讓所有人共用密語(yǔ) .200
11.5 對(duì)每一位訪問(wèn)者分別做認(rèn)證 204
11.6 采用新式技術(shù)給每一位訪問(wèn)者分別做認(rèn)證 .205
11.6.1 OAuth2 206
11.6.2 表示用戶的User 模型 .208
11.6.3 實(shí)現(xiàn)Data 層中與User 有關(guān)的操作 208
11.6.4 實(shí)現(xiàn)一套與Data 層中的User 操作類似的Fake 操作 .210
11.6.5 實(shí)現(xiàn)Service 層中與User 有關(guān)的操作 .212
11.6.6 實(shí)現(xiàn)Web 層中與User 有關(guān)的操作 214
11.6.7 測(cè)試 216
11.6.8 修改頂層的主程序 216
11.6.9 回顧早前實(shí)現(xiàn)的認(rèn)證步驟 .217
11.6.10 JWT 218
11.6.11 經(jīng)由OIDC 協(xié)議,通過(guò)第三方賬號(hào)做認(rèn)證.219
11.7 授權(quán) 220
11.8 中間件 222
11.8.1 CORS(跨域資源共享) 222
11.8.2 通過(guò)第三方包實(shí)現(xiàn)認(rèn)證與授權(quán) 224
11.9 小結(jié) 225
第12 章 測(cè)試 227
12.1 預(yù)覽 227
12.2 對(duì)Web API 做測(cè)試 .227
12.3 對(duì)哪里的代碼做測(cè)試 .228
12.4 如何做測(cè)試 .229
12.5 Pytest .230
12.6 網(wǎng)站的文件布局 231
12.7 自動(dòng)化的單元測(cè)試 232
12.7.1 Mocking .232
12.7.2 Test Double 與Fake 237
12.7.3 對(duì)Web 層做測(cè)試 239
12.7.4 對(duì)Service 層做測(cè)試 .242
12.7.5 對(duì)Data 層做測(cè)試 244
12.8 自動(dòng)化的集成測(cè)試 246
12.9 Repository 模式 248
12.10 自動(dòng)化的全面測(cè)試 248
12.11 安全測(cè)試 251
12.12 負(fù)載測(cè)試 252
12.13 小結(jié) .253
第13 章 將網(wǎng)站部署到生產(chǎn)環(huán)境之中 255
13.1 預(yù)覽 255
13.2 部署網(wǎng)站 255
13.2.1 采用多個(gè)Worker 來(lái)運(yùn)行服務(wù)器 .256
13.2.2 HTTPS .257
13.2.3 Docker .257
13.2.4 云服務(wù) .258
13.2.5 Kubernetes .259
13.3 改善網(wǎng)站的性能 259
13.3.1 Async 260
13.3.2 緩存 260
13.3.3 數(shù)據(jù)庫(kù)、文件、內(nèi)存 260
13.3.4 隊(duì)列 261
13.3.5 Python 本身 261
13.4 疑難排解 262
13.4.1 確定這是哪一類問(wèn)題 262
13.4.2 查看日志 263
13.4.3 收集指標(biāo) 263
13.5 小結(jié) 264
第四部分 漫談
第14 章 數(shù)據(jù)庫(kù)、數(shù)據(jù)科學(xué)以及一點(diǎn)點(diǎn)AI 267
14.1 預(yù)覽 267
14.2 數(shù)據(jù)存儲(chǔ)方案 268
14.3 關(guān)系型數(shù)據(jù)庫(kù)及SQL 269
14.3.1 SQLAlchemy 269
14.3.2 SQLModel .272
14.3.3 SQLite .272
14.3.4 PostgreSQL 273
14.3.5 EdgeDB 273
14.4 非關(guān)系型數(shù)據(jù)庫(kù)(NoSQL 數(shù)據(jù)庫(kù)) .274
14.4.1 Redis 275
14.4.2 MongoDB 275
14.4.3 Cassandra 275
14.4.4 Elasticsearch .275
14.5 SQL 數(shù)據(jù)庫(kù)中的NoSQL 性 275
14.6 數(shù)據(jù)庫(kù)負(fù)載測(cè)試 277
14.7 數(shù)據(jù)科學(xué)與人工智能(AI) .279
14.8 小結(jié) 282
第15 章 文件 283
15.1 預(yù)覽 283
15.2 如何支持分塊傳輸 283
15.3 上傳文件 283
15.3.1 通過(guò)File() 實(shí)現(xiàn)文件上傳 284
15.3.2 通過(guò)UploadFile 實(shí)現(xiàn)文件上傳 285
15.4 下載文件 287
15.4.1 FileResponse 287
15.4.2 StreamingResponse 288
15.5 提供靜態(tài)文件服務(wù) 289
15.6 小結(jié) 291
第16 章 表單與模板 . 293
16.1 預(yù)覽 293
16.2 表單 293
16.3 模板 296
16.4 小結(jié) 300
第17 章 數(shù)據(jù)發(fā)現(xiàn)與數(shù)據(jù)可視化 301
17.1 預(yù)覽 301
17.2 Python 與數(shù)據(jù)處理 .301
17.3 讀取并輸出PSV 格式的文本數(shù)據(jù) 302
17.3.1 用csv 包讀取PSV 文件 .303
17.3.2 用python-tabulate 包讀取PSV 文件 304
17.3.3 用pandas 讀取PSV 文件并輸出其內(nèi)容 .305
17.4 讀取SQLite 數(shù)據(jù)庫(kù)中的數(shù)據(jù)并以網(wǎng)頁(yè)的形式顯示 306
17.4.1 與圖表顯示有關(guān)的軟件包 .307
17.4.2 圖表示例1:試用Plotly 308
17.4.3 圖表示例2:繪制直方圖 311
17.4.4 與地圖顯示有關(guān)的軟件包 .312
17.4.5 地圖示例 314
17.5 小結(jié) 315
第18 章 游戲 317
18.1 預(yù)覽 317
18.2 與游戲制作有關(guān)的Python 包 317
18.3 拆分游戲邏輯 318
18.4 游戲的設(shè)計(jì) .319
18.5 Web 層的第一部分工作:實(shí)現(xiàn)游戲的初始化 320
18.6 Web 層的第二部分工作:實(shí)現(xiàn)游戲的后續(xù)步驟 322
18.7 Service 層的第一部分工作:實(shí)現(xiàn)游戲的初始化 324
18.8 Service 層的第二部分工作:判斷玩家猜測(cè)得是否正確325
18.9 測(cè)試 326
18.10 Data 層的工作:實(shí)現(xiàn)游戲的初始化 327
18.11 開始玩這個(gè)猜單詞游戲 .327
18.12 小結(jié) .329
附錄A 延伸閱讀 . 331
附錄B 用作示例數(shù)據(jù)的神秘生物及探索者 335