深入理解 Django:框架內幕與實現原理
內容描述
全書共分為8 章,分別是Django 源碼的前置知識、 Django 命令原理解析、Django 內置的ORM框架、Django 內置的模板系統、解讀Django 核心模塊的源碼、Django 的視圖層、Django 的中間件原理和解讀Django 中的輔助代碼。本書展示了剖析Django 框架的完整過程,這種剖析方式同樣適用於其他框架,如Flask、Ansible 和Scrapy 等。
目錄大綱
第1 章 Django 源碼的前置知識 ............................................................................................... 1
1.1 在學習Django 源碼前,該做什麼 ............................................................................. 1
1.1.1 Django 的版本選擇 ..................................................................................... 1
1.1.2 Django 源碼學習基礎 .................................................................................. 2
1.2 搭建Django 的調試環境和測試環境 .......................................................................... 3
1.2.1 調試django-admin 命令 .................................................................................. 3
1.2.2 調試manage.py 命令 ....................................................................................... 8
1.2.3 調試框架源碼 ................................................................................................. 11
1.2.4 搭建Django 的測試環境 ............................................................................... 15
1.3 學習Django 源碼的建議 ........................................................................................... 17
1.4 小結 ............................................................................................................................. 18
第2 章 Django 命令原理解析 ...................................................................................... 19
2.1 基礎方法介紹 ............................................................................................................. 19
2.1.1 find_commands()函數 .................................................................................... 19
2.1.2 load_command_class()函數 ............................................................................ 20
2.1.3 get_commands()函數 ...................................................................................... 20
2.1.4 call_command()函數 ...................................................................................... 21
2.2 startproject 命令的實現原理 ...................................................................................... 24
2.3 shell 命令的實現原理 ................................................................................................. 33
2.4 makemigrations 命令的實現原理 .............................................................................. 45
2.4.1 makemigrations 命令的基本操作示例 ........................................................ 45
2.4.2 遷移相關的基礎類與方法 ......................................................................... 47
2.4.3 追踪makemigrations 命令 .......................................................................... 69
2.5 migrate 命令的實現原理 ............................................................................................ 78
2.6 小結 ............................................................................................................................. 90
第3 章 Django 內置的ORM 框架 ................................................................................ 91
3.1 讀取Django 項目的配置信息 ................................................................................... 91
3.1.1 Settings 類 .................................................................................................. 92
3.1.2 LazySettings 類 ........................................................................................... 94
3.2 ORM 框架的底層核心 ............................................................................................... 97
3.2.1 mysqlclient 模塊中的常用方法 .................................................................. 97
3.2.2 ORM 框架的源碼解析 ............................................................................... 98
3.2.3 DatabaseWrapper 類的實戰案例 .............................................................. 108
3.3 Django 中數據庫操作背後的原理........................................................................... 116
3.3.1 在Django 中執行原生SQL 語句 ............................................................. 117
3.3.2 ORM 框架的基本操作 ............................................................................. 118
3.3.3 答疑解惑 .................................................................................................. 160
3.3.4 ORM 框架的聚合操作 ............................................................................. 162
3.4 ORM 框架的部分源碼解讀 ..................................................................................... 176
3.5 小結 ........................................................................................................................... 205
第4 章 Django 內置的模板系統 ................................................................................. 206
4.1 Django 內置的模板語法 .......................................................................................... 206
4.1.1 for 標籤 .................................................................................................... 207
4.1.2 if 標籤 ...................................................................................................... 211
4.1.3 csrf_token 標籤 ......................................................................................... 211
4.1.4 with 標籤 .................................................................................................. 212
4.1.5 cycle 標籤 ................................................................................................. 213
4.1.6 include 標籤 ............................................................................................. 214
4.1.7 過濾器標籤 .............................................................................................. 215
4.2 Django 內置模板引擎源碼解讀 .............................................................................. 216
4.2.1 get_template()方法的源碼解析 ................................................................ 216
4.2.2 _engine_list()方法的源碼解析.................................................................. 216
4.2.3 EngineHandler 類的源碼解析 ................................................................. 217
4.2.4 DjangoTemplates 類的源碼解析 ............................................................... 221
4.3 答疑解惑 ................................................................................................................... 283
4.4 Jinja2 模塊封裝過程解析 ......................................................................................... 299
4.5 小結 ........................................................................................................................... 303
第5 章 解讀Django 核心模塊的源碼 ........................................................................ 304
5.1 core 目錄源碼一覽 ................................................................................................... 304
5.2 請求處理 ................................................................................................................... 305
5.3 緩存模塊 ................................................................................................................... 316
5.4 檢查模塊 ................................................................................................................... 330
5.4.1 messages.py 文件的源碼解析 ................................................................... 330
5.4.2 registry.py 文件的源碼解析 ...................................................................... 333
5.5 序列化 ....................................................................................................................... 348
5.5.1 serialize()方法的源碼解析 ....................................................................... 349
5.5.2 JSON 序列化器的底層邏輯 ..................................................................... 359
5.5.3 簡單分析Python 序列化器的輸出結果 ................................................... 366
5.6 文件模塊 ................................................................................................................... 367
5.6.1 uploadedfile.py 文件 ................................................................................. 367
5.6.2 images.py 文件 ......................................................................................... 374
5.6.3 locks.py 文件 ............................................................................................ 376
5.6.4 temp.py 文件 ............................................................................................ 378
5.6.5 move.py 文件 ........................................................................................... 379
5.6.6 storage.py 文件 ......................................................................................... 381
5.6.7 uploadhandler.py 文件 .............................................................................. 384
5.7 發送郵件 ................................................................................................................... 393
5.8 小結 ........................................................................................................................... 405
第6 章 Django 的視圖層 ........................................................................................... 406
6.1 視圖層實戰 ............................................................................................................... 406
6.1.1 實驗1:Django 中的“hello, world” ....................................................... 406
6.1.2 實驗2:Django 中的視圖類 .................................................................... 409
6.1.3 實驗3:Django 中的請求傳參 ................................................................ 410
6.1.4 實驗4:Django 中的文件上傳演示 ........................................................ 414
6.1.5 實驗5:在Django 中操作Session .......................................................... 417
6.2 請求與響應 ............................................................................................................... 419
6.2.1 HttpRequest 類的源碼 .............................................................................. 429
6.2.2 HttpResponse 類的源碼 ............................................................................ 433
6.2.3 HttpRequest 類和HttpResponseBase 類的操作示例 ................................ 440
6.3 視圖層核心源碼解讀 ............................................................................................... 444
6.3.1 HTTP 請求路徑的匹配過程 ..................................................................... 449
6.3.2 答疑解惑 .................................................................................................. 457
6.4 視圖類與Mixin 類 ................................................................................................... 462
6.4.1 Mixin 類的源碼解析 ................................................................................ 462
6.4.2 TemplateView 類的源碼解析 ................................................................... 463
6.4.3 RedirectView 類的源碼解析 ..................................................................... 467
6.4.4 DetailView 類和ListView 類的源碼解析 ................................................. 469
6.4.5 MultipleObjectMixin 類的源碼解析 ......................................................... 479
6.4.6 Paginator 類的源碼解析 ........................................................................... 482
6.5 追踪Session 相關的源碼 ......................................................................................... 486
6.5.1 Session 相關的配置 .................................................................................. 486
6.5.2 Session 的存儲引擎 .................................................................................. 495
6.5.3 SessionBase 類中的代碼文件 ................................................................... 502
6.6 答疑解惑 ................................................................................................................... 507
6.7 小結 ........................................................................................................................... 517
第7 章 Django 的中間件原理 .................................................................................... 518
7.1 配置中間件 ............................................................................................................... 518
7.2 加載中間件 ............................................................................................................... 519
7.3 中間件的處理流程 ................................................................................................... 521
7.3.1 中間件的請求處理流程 ........................................................................... 521
7.3.2 中間件的響應處理流程 ........................................................................... 525
7.3.3 中間件的其他鉤子方法 ........................................................................... 526
7.4 常用的中間件 ........................................................................................................... 528
7.4.1 Django 內置的中間件類 .......................................................................... 528
7.4.2 CsrfViewMiddleware 中間件 .................................................................... 529
7.5 自定義中間件 ........................................................................................................... 536
7.6 小結 ........................................................................................................................... 541
第8 章 解讀Django 中的輔助代碼 ............................................................................ 542
8.1 自動重載 ................................................................................................................... 542
8.2 日誌配置 ................................................................................................................... 552
8.2.1 日誌配置實戰 .......................................................................................... 553
8.2.2 日誌配置的源碼追踪 ............................................................................... 555
8.3 時間解析 ................................................................................................................... 559
8.3.1 datetime_safe.py 文件 ............................................................................... 559
8.3.2 dateformat.py 文件 ................................................................................... 562
8.3.3 dateparse.py 文件 ...................................................................................... 565
8.4 文本處理 ................................................................................................................... 569
8.4.1 text.py 文件中的capfirst()函數和wrap()函數 .......................................... 570
8.4.2 html.py 文件中的代碼 .............................................................................. 575
8.5 其他的類與函數 ....................................................................................................... 582
8.6 小結 ........................................................................................................................... 589
作者介紹
沈聰,本科畢業於南昌大學,碩士畢業於武漢大學電子信息學院。
目前在中國電信IT研發中心擔任後端開發工程師一職(後改名天翼雲科技有限公司)。在天翼雲媒體存儲小組從事大規模集群部署、運維ping台開發以及集群日常運維、巡檢等工作。
專注於Python自動化運維、雲存儲等方向,研究過數個熱門Python框架源碼(Ansible/Django/Scrapy等)並在慕課網上有多個基礎教程發表,內容涉及Nginx入門、Python算法、Django框架以及Scrapy框架。
全樹強,本碩畢業於武漢大學電子信息學院,在天翼雲科技有限公司擔任後端開發工程師一職,全棧工程師。
目前在中國電信IT研發中心擔任後端開發工程師一職,期間負責主導媒體存儲小組內部統一運維管理ping台的研發工作,對Django框架源碼有較深的研究。
此外,他還在Java後端和前端、自動化運維領域做過大量開發工作,有豐富的開發經驗。