Django框架是專門幫助開發(fā)人員快速、高效地構(gòu)建健壯和功能強大的Web應(yīng)用程序而設(shè)計的。其間,Django框架負責處理大量的枯燥和重復(fù)的工作,解決諸如項目結(jié)構(gòu)、數(shù)據(jù)庫對象-關(guān)系映射、模板機制、表單驗證、會話、身份驗證、安全性、Cookie管理、國際化、基本管理和腳本的數(shù)據(jù)訪問接口等問題。Django構(gòu)建于Python編程語言之上,該語言自身強制執(zhí)行清晰和易讀的代碼。除了核心框架,Django的設(shè)計目的是讓開發(fā)人員能夠創(chuàng)建第三方模塊,進而可與自己的應(yīng)用程序結(jié)合使用。另外,Django有個已經(jīng)建立的充滿活力的社區(qū),讀者可從中查找源代碼、尋求幫助并貢獻自己的意見。
本書將利用Django 3.0框架指導(dǎo)讀者完成Web開發(fā)過程中的各個階段。首先將討論項目的配置和結(jié)構(gòu);隨后介紹如何使用復(fù)用組件以定義數(shù)據(jù)庫結(jié)構(gòu),以及如何通過項目的生命周期對其進行管理。相應(yīng)地,本書將通過表單和視圖訪問輸入和列出數(shù)據(jù)。此外,我們還將處理響應(yīng)式模板和JavaScript以增強用戶體驗。接下來,我們將通過自定義過濾器和標簽提升Django的模板系統(tǒng),從而使前端開發(fā)更具靈活性。在此之后,我們還將細化管理界面,以簡化內(nèi)容編輯器的工作流。據(jù)此,我們將重點轉(zhuǎn)移至項目的穩(wěn)定性和健壯性上,進而優(yōu)化應(yīng)用程序,同時提升應(yīng)用程序的安全性。隨后將介紹如何高效地存儲和管理層次結(jié)構(gòu),并展示如何從不同的數(shù)據(jù)源收集數(shù)據(jù)。其間將會發(fā)現(xiàn),以某些格式向其他處提供自身的數(shù)據(jù)比想象中的要更加簡單。接下來將介紹Django項目代碼的編程和調(diào)試技巧,并通過一些有效的選擇方案測試代碼。在本書的最后,我們還將展示如何將項目部署至產(chǎn)品中,并通過設(shè)置維護操作完成開發(fā)周期。
與其他一些僅涉及框架自身的Django書籍相比,本書引入了一些較為重要的第三方模塊和工具以幫助我們完成Web開發(fā)。除此之外,我們還借助Bootstrap前端框架和jQuery JavaScript庫提供了一些示例,從而簡化某些高級、復(fù)雜的用戶界面的創(chuàng)建工作。
適用讀者
如果讀者具有一定的Django使用經(jīng)驗,并想進一步提升自己的技能,那么本書將十分適合于你。本書適用于中級和專業(yè)Django開發(fā)人員,旨在構(gòu)建多語言、安全的、響應(yīng)式的、可伸縮的健壯型項目。
本書內(nèi)容
第1章將介紹Django項目所需的基本設(shè)置和配置步驟,其中涉及虛擬環(huán)境、Docker、不同環(huán)境和數(shù)據(jù)庫間的項目設(shè)置。
第2章將解釋如何編寫模塊構(gòu)建過程中的可復(fù)用代碼。這里,用新應(yīng)用程序首先需要定義的是數(shù)據(jù)模塊,這將構(gòu)成項目的主要組成部分。隨后將學(xué)習如何將多語言數(shù)據(jù)保存至數(shù)據(jù)庫中。另外,本章還將學(xué)習如何利用Django遷移管理數(shù)據(jù)庫模式變化和數(shù)據(jù)操控。
第3章將討論如何構(gòu)建視圖和表單,用于數(shù)據(jù)顯示和編輯。其間,我們將學(xué)習如何使用微格式和其他協(xié)議,以確保頁面更具可讀性,進而展示搜索結(jié)果和社交網(wǎng)絡(luò)中的顯示內(nèi)容。另外,本章還將學(xué)習如何生成PDF文檔和實現(xiàn)多語言搜索。
第4章將介紹模板和JavaScript結(jié)合使用的實際示例,其間將整合下列內(nèi)容:面向用戶的渲染模板表達信息,以及在現(xiàn)代站點中JavaScript提供的重要的增強內(nèi)容,進而豐富用戶體驗。
第5章將介紹如何創(chuàng)建和使用自己的模板過濾器和標簽。其間將會看到,可擴展默認的Django模板系統(tǒng)以滿足模板開發(fā)人員的要求。
第6章將探討默認的Django管理界面,并引領(lǐng)讀者通過自己的功能擴展該管理界面。
第7章將深入討論Django固有或外部的項目安全和優(yōu)化方法。
第8章將介紹Django中樹狀結(jié)構(gòu)的創(chuàng)建和操控,同時還將django-mptt或treebeard庫引入工作流。本章將展示如何使用這兩種庫實現(xiàn)層次結(jié)構(gòu)的顯示和管理。
第9章將討論不同格式的數(shù)據(jù)轉(zhuǎn)換,以及不同數(shù)據(jù)源的提供者。同時,本章將采用自定義管理命令實現(xiàn)數(shù)據(jù)導(dǎo)入,并通過站點圖、RSS和REST API實現(xiàn)數(shù)據(jù)導(dǎo)出。
第10章將展示一些額外的代碼片段和技巧,這對于日常的Web開發(fā)和調(diào)試十分有用。
第11章將引入不同的測試類型,并提供多個特征示例用以測試項目代碼。
第12章將處理針對Python Package Index的第三方應(yīng)用程序部署,以及專用服務(wù)器的Django項目部署。
第13章將解釋如何創(chuàng)建數(shù)據(jù)庫備份、為常規(guī)任務(wù)設(shè)置計劃作業(yè),以及如何生成日志事件以供進一步查看。
本書資源
采用Django 3.0實現(xiàn)本書示例時,需要安裝下列內(nèi)容:
? Python 3.6或更高版本。
? 操控圖像的Pillow庫。
? MySQL數(shù)據(jù)庫和mysqlclient綁定庫,或者基于psycopg2-binary綁定庫的PostgreSQL數(shù)據(jù)庫。
? Docker Desktop或Docker Toolbox用以實現(xiàn)完整系統(tǒng)虛擬化效果,或者一個內(nèi)建的虛擬環(huán)境,以使每個項目的Python模塊處于分離狀態(tài)。
? 針對版本控制的Git。
本書所涉及的軟件和硬件如表1所示。
表1
軟件和硬件 操 作 系 統(tǒng)
Python 3.6 或更高版本
Django 3.0.X
PostgreSQL 11.4或更高版本/MySQL 5.6或更高版本 最新的基于UNIX的操作系統(tǒng),如macOS或Linux(也有可能在Windows操作系統(tǒng)上進行開發(fā))
除此之外,其他的特定需求將在每個示例中單獨提到。
讀者可采用任何代碼編輯器編輯項目文件,但這里推薦使用PyCharm(https://www. jetbrains.com/pycharm/)或Visual Studio Code(https://code.visualstudio.com/)。
注意:
全部代碼示例均通過Django 3.0測試,且應(yīng)可與Django的后續(xù)版本協(xié)同工作。
下載示例代碼文件
讀者可通過www.packt.com賬戶下載本書的示例代碼文件。如果讀者購買了本書,則可訪問www.packtpub.com/support并注冊,我們將把相關(guān)文件通過電子郵件直接發(fā)送于您。
下列步驟展示了代碼文件的下載過程。
? 登錄www.packt.com并注冊。
? 選擇Support選項卡。
? 單擊Code Downloads按鈕。
? 在搜索框中輸入本書名稱,并遵循相應(yīng)的指令。
待文件下載完畢后,確保利用下列軟件的最新版本解壓或析取文件夾。
? WinRAR/7-Zip(Windows環(huán)境)。
? Zipeg/iZip/UnRarX(Mac環(huán)境)。
? 7-Zip/PeaZip(Linux環(huán)境)。
除此之外,本書的代碼包還托管于GitHub上,對應(yīng)網(wǎng)址為https://github.com/ PacktPublishing/Django-3-Web-Development-Cookbook-Fourth-Edition,且代碼將與已有的GitHub儲存庫同步更新。
另外,讀者還可訪問https://github.com/PacktPublishing/查看其他圖書的代碼包、豐富的資源分類和視頻內(nèi)容。
本書慣例
本書涵蓋了以下文本慣例。
代碼塊如下所示。
# requirements/dev.txt
-r _base.txt
coverage
django-debug-toolbar
selenium
需要強調(diào)的特定代碼采用粗體表示,如下所示。
class Idea(CreationModificationDateBase, MetaTagsBase, UrlBase):
title = models.CharField(
_("Title"),
max_length=200,
)
content = models.TextField(
_("Content"),
)
命令行輸入或輸出內(nèi)容如下所示。
(env)$ pip install -r requirements/dev.txt
圖標表示警告或重要事項。
圖標表示提示或操作技巧。
讀者反饋和客戶支持
歡迎讀者對本書提出建議或意見并予以反饋。
對此,讀者可向customercare@packtpub.com發(fā)送郵件,并以書名作為郵件標題。
勘誤表
盡管我們希望本書做到盡善盡美,但疏漏依然在所難免。如果讀者發(fā)現(xiàn)謬誤,無論是文字錯誤抑或是代碼錯誤,還望不吝賜教。對此,讀者可訪問http://www.packtpub.com/ submit-errata,選取對應(yīng)書籍,輸入并提交相關(guān)問題的詳細內(nèi)容。
版權(quán)須知
一直以來,互聯(lián)網(wǎng)上的版權(quán)問題從未間斷,Packt出版社對此類問題異常重視。若讀者在互聯(lián)網(wǎng)上發(fā)現(xiàn)本書任意形式的副本,請告知我們網(wǎng)絡(luò)地址或網(wǎng)站名稱,我們將對此予以處理。關(guān)于盜版問題,讀者可發(fā)送郵件至copyright@packtpub.com。
若讀者針對某項技術(shù)具有專家級的見解,抑或計劃撰寫書籍或完善某部著作的出版工作,則可訪問authors.packtpub.com。
問題解答
讀者對本書有任何疑問,均可發(fā)送郵件至questions@packtpub.com,我們將竭誠為您服務(wù)。
第1章 Django 3.0開始之旅 1
1.1 簡介 1
1.2 技術(shù)需求 2
1.3 與虛擬環(huán)境協(xié)同工作 2
1.3.1 準備工作 2
1.3.2 實現(xiàn)方式 3
1.3.3 工作方式 3
1.3.4 延伸閱讀 3
1.4 創(chuàng)建一個項目文件結(jié)構(gòu) 4
1.4.1 準備工作 4
1.4.2 實現(xiàn)方式 4
1.4.3 工作方式 6
1.4.4 更多內(nèi)容 7
1.4.5 延伸閱讀 7
1.5 利用pip處理項目依賴項 8
1.5.1 準備工作 8
1.5.2 實現(xiàn)方式 8
1.5.3 工作方式 9
1.5.4 更多內(nèi)容 10
1.5.5 延伸閱讀 10
1.6 針對開發(fā)、測試、預(yù)發(fā)布和產(chǎn)品環(huán)境,配置設(shè)置項 10
1.6.1 準備工作 10
1.6.2 實現(xiàn)方式 11
1.6.3 工作方式 12
1.6.4 延伸閱讀 12
1.7 在設(shè)置項中定義相對路徑 12
1.7.1 準備工作 13
1.7.2 實現(xiàn)方式 13
1.7.3 工作方式 13
1.7.4 延伸閱讀 14
1.8 處理敏感設(shè)置項 14
1.8.1 準備工作 14
1.8.2 實現(xiàn)方式 14
1.8.3 工作方式 15
1.8.4 更多內(nèi)容 15
1.8.5 延伸閱讀 16
1.9 在項目中包含外部依賴項 16
1.9.1 準備工作 17
1.9.2 實現(xiàn)方式 17
1.9.3 工作方式 18
1.9.4 延伸閱讀 18
1.10 以動態(tài)方式設(shè)置STATIC_URL 19
1.10.1 準備工作 19
1.10.2 實現(xiàn)方式 19
1.10.3 工作方式 20
1.10.4 更多內(nèi)容 20
1.10.5 延伸閱讀 22
1.11 將UTF-8設(shè)置為MySQL配置的默認編碼機制 22
1.11.1 準備工作 22
1.11.2 實現(xiàn)方式 22
1.11.3 工作方式 23
1.11.4 更多內(nèi)容 23
1.11.5 延伸閱讀 23
1.12 創(chuàng)建Git忽略文件 23
1.12.1 準備工作 23
1.12.2 實現(xiàn)方式 23
1.12.3 工作方式 25
1.12.4 延伸閱讀 25
1.13 刪除Python編譯文件 25
1.13.1 準備工作 25
1.13.2 實現(xiàn)方式 26
1.13.3 工作方式 26
1.13.4 更多內(nèi)容 26
1.13.5 延伸閱讀 26
1.14 遵循Python文件中的導(dǎo)入順序 26
1.14.1 準備工作 26
1.14.2 實現(xiàn)方式 27
1.14.3 工作方式 27
1.14.4 更多內(nèi)容 27
1.14.5 延伸閱讀 28
1.15 創(chuàng)建應(yīng)用程序配置 28
1.15.1 準備工作 28
1.15.2 實現(xiàn)方式 28
1.15.3 工作方式 29
1.15.4 更多內(nèi)容 30
1.15.5 延伸閱讀 30
1.16 定義可覆寫的應(yīng)用程序設(shè)置項 30
1.16.1 準備工作 31
1.16.2 實現(xiàn)方式 31
1.16.3 工作方式 33
1.16.4 延伸閱讀 33
1.17 針對Django、Gunicorn、Nginx和PostgreSQL,與Docker容器協(xié)同工作 33
1.17.1 準備工作 34
1.17.2 實現(xiàn)方式 34
1.17.3 工作方式 38
1.17.4 更多內(nèi)容 41
1.17.5 延伸閱讀 41
第2章 模型和數(shù)據(jù)庫結(jié)構(gòu) 43
2.1 簡介 43
2.2 技術(shù)需求 43
2.3 使用模型混入 44
2.3.1 準備工作 44
2.3.2 實現(xiàn)方式 44
2.3.3 工作方式 45
2.3.4 更多內(nèi)容 45
2.3.5 延伸閱讀 46
2.4 利用與URL相關(guān)的方法創(chuàng)建一個模型混入 46
2.4.1 準備工作 47
2.4.2 實現(xiàn)方式 47
2.4.3 工作方式 48
2.4.4 延伸閱讀 49
2.5 創(chuàng)建一個模型混入以處理日期的創(chuàng)建和修改 50
2.5.1 準備工作 50
2.5.2 實現(xiàn)方式 50
2.5.3 工作方式 51
2.5.4 延伸閱讀 51
2.6 創(chuàng)建一個模型混入以關(guān)注元標簽 51
2.6.1 準備工作 52
2.6.2 實現(xiàn)方式 52
2.6.3 工作方式 54
2.6.4 延伸閱讀 54
2.7 創(chuàng)建一個模型混入以處理Generic Relation 54
2.7.1 準備工作 55
2.7.2 實現(xiàn)方式 55
2.7.3 工作方式 58
2.7.4 延伸閱讀 59
2.8 處理多語言字段 59
2.8.1 準備工作 59
2.8.2 實現(xiàn)方式 60
2.8.3 工作方式 64
2.8.4 延伸閱讀 65
2.9 與模型翻譯表協(xié)同工作 65
2.9.1 準備工作 66
2.9.2 實現(xiàn)方式 66
2.9.3 工作方式 69
2.9.4 延伸閱讀 70
2.10 避免環(huán)狀依賴項 71
2.10.1 準備工作 71
2.10.2 實現(xiàn)方式 71
2.10.3 延伸閱讀 73
2.11 添加數(shù)據(jù)庫約束 73
2.11.1 準備工作 73
2.11.2 實現(xiàn)方式 73
2.11.3 工作方式 74
2.11.4 更多內(nèi)容 75
2.11.5 延伸閱讀 76
2.12 使用遷移 76
2.12.1 準備工作 77
2.12.2 實現(xiàn)方式 77
2.12.3 工作方式 78
2.12.4 更多內(nèi)容 78
2.12.5 延伸閱讀 79
2.13 將外鍵修改為多對多字段 79
2.13.1 準備工作 79
2.13.2 實現(xiàn)方式 81
2.13.3 工作方式 83
2.13.4 更多內(nèi)容 84
2.13.5 延伸閱讀 84
第3章 表單和視圖 85
3.1 簡介 85
3.2 技術(shù)需求 85
3.3 利用CRUDL函數(shù)創(chuàng)建一個應(yīng)用程序 86
3.3.1 準備工作 86
3.3.2 實現(xiàn)方式 89
3.3.3 工作方式 92
3.3.4 更多內(nèi)容 92
3.3.5 延伸閱讀 93
3.4 保存模型實例的作者 93
3.4.1 準備工作 93
3.4.2 實現(xiàn)方式 93
3.4.3 工作方式 94
3.4.4 延伸閱讀 95
3.5 上傳圖像 95
3.5.1 準備工作 95
3.5.2 實現(xiàn)方式 95
3.5.3 工作方式 98
3.5.4 延伸閱讀 99
3.6 利用自定義模板創(chuàng)建一個表單布局 99
3.6.1 準備工作 99
3.6.2 實現(xiàn)方式 100
3.6.3 工作方式 103
3.6.4 延伸閱讀 105
3.7 利用django-crispy-forms創(chuàng)建一個表單布局 105
3.7.1 準備工作 105
3.7.2 實現(xiàn)方式 106
3.7.3 工作方式 108
3.7.4 更多內(nèi)容 109
3.7.5 延伸閱讀 110
3.8 與表單集協(xié)同工作 110
3.8.1 準備工作 110
3.8.2 實現(xiàn)方式 110
3.8.3 工作方式 118
3.8.4 更多內(nèi)容 120
3.8.5 延伸閱讀 120
3.9 過濾對象列表 121
3.9.1 準備工作 121
3.9.2 實現(xiàn)方式 122
3.9.3 工作方式 127
3.9.4 延伸閱讀 127
3.10 管理分頁列表 128
3.10.1 準備工作 128
3.10.2 實現(xiàn)方式 128
3.10.3 工作方式 131
3.10.4 延伸閱讀 132
3.11 合成基于類的視圖 132
3.11.1 準備工作 132
3.11.2 實現(xiàn)方式 132
3.11.3 工作方式 134
3.11.4 更多內(nèi)容 135
3.11.5 延伸閱讀 135
3.12 提供Open Graph和Twitter Card數(shù)據(jù) 135
3.12.1 準備工作 135
3.12.2 實現(xiàn)方式 135
3.12.3 工作方式 138
3.12.4 延伸閱讀 138
3.13 提供schema.org詞匯表 139
3.13.1 準備工作 139
3.13.2 實現(xiàn)方式 139
3.13.3 工作方式 141
3.13.4 延伸閱讀 141
3.14 生成PDF文檔 142
3.14.1 準備工作 142
3.14.2 實現(xiàn)方式 142
3.14.3 工作方式 146
3.14.4 延伸閱讀 147
3.15 利用Haystack和Whoosh實現(xiàn)多語言搜索 147
3.15.1 準備工作 147
3.15.2 實現(xiàn)方式 148
3.15.3 工作方式 153
3.15.4 延伸閱讀 154
3.16 利用Elasticsearch DSL實現(xiàn)多語言搜索 154
3.16.1 準備工作 154
3.16.2 實現(xiàn)方式 154
3.16.3 工作方式 162
3.16.4 延伸閱讀 163
第4章 模板和JavaScript 165
4.1 簡介 165
4.2 技術(shù)需求 165
4.3 安排base.html模板 166
4.3.1 準備工作 166
4.3.2 實現(xiàn)方式 166
4.3.3 工作方式 168
4.3.4 延伸閱讀 169
4.4 使用Django Sekizai 170
4.4.1 準備工作 170
4.4.2 實現(xiàn)方式 171
4.4.3 工作方式 172
4.4.4 延伸閱讀 172
4.5 公開JavaScript中的設(shè)置項 172
4.5.1 準備工作 172
4.5.2 實現(xiàn)方式 173
4.5.3 工作方式 175
4.5.4 延伸閱讀 176
4.6 使用HTML 5數(shù)據(jù)屬性 176
4.6.1 準備工作 176
4.6.2 實現(xiàn)方式 179
4.6.3 工作方式 185
4.6.4 延伸閱讀 187
4.7 提供響應(yīng)式圖像 187
4.7.1 準備工作 187
4.7.2 實現(xiàn)方式 187
4.7.3 工作方式 190
4.7.4 更多內(nèi)容 192
4.7.5 延伸閱讀 192
4.8 實現(xiàn)連續(xù)的滾動 192
4.8.1 準備工作 192
4.8.2 實現(xiàn)方式 193
4.8.3 工作方式 197
4.8.4 更多內(nèi)容 199
4.8.5 延伸閱讀 199
4.9 在模式對話框中打開對象的細節(jié)信息 199
4.9.1 準備工作 200
4.9.2 實現(xiàn)方式 200
4.9.3 工作方式 203
4.9.4 延伸閱讀 204
4.10 實現(xiàn)Like微件 204
4.10.1 準備工作 205
4.10.2 實現(xiàn)方式 206
4.10.3 工作方式 210
4.10.4 延伸閱讀 212
4.11 通過Ajax上傳圖像 212
4.11.1 準備工作 212
4.11.2 實現(xiàn)方式 212
4.11.3 工作方式 221
4.11.4 更多內(nèi)容 223
4.11.5 延伸閱讀 223
第5章 自定義模板過濾器和標簽 225
5.1 簡介 225
5.2 技術(shù)需求 225
5.3 遵循自定義的模板過濾器和標簽規(guī)則 226
5.4 創(chuàng)建一個模板過濾器以顯示帖子發(fā)布的天數(shù) 227
5.4.1 準備工作 227
5.4.2 實現(xiàn)方式 227
5.4.3 工作方式 228
5.4.4 更多內(nèi)容 229
5.4.5 延伸閱讀 229
5.5 創(chuàng)建一個模板過濾器以析取第一個媒體對象 229
5.5.1 準備工作 229
5.5.2 實現(xiàn)方式 230
5.5.3 工作方式 230
5.5.4 更多內(nèi)容 231
5.5.5 延伸閱讀 231
5.6 創(chuàng)建一個模板過濾器以識別URL 232
5.6.1 準備工作 232
5.6.2 實現(xiàn)方式 232
5.6.3 工作方式 233
5.6.4 延伸閱讀 233
5.7 創(chuàng)建一個模板標簽以包含一個模板 233
5.7.1 準備工作 233
5.7.2 實現(xiàn)方式 234
5.7.3 工作方式 235
5.7.4 更多內(nèi)容 236
5.7.5 延伸閱讀 237
5.8 創(chuàng)建一個模板標簽以加載模板中的QuerySet 237
5.8.1 準備工作 237
5.8.2 實現(xiàn)方式 239
5.8.3 工作方式 241
5.8.4 延伸閱讀 242
5.9 創(chuàng)建一個模板標簽以作為模板解析內(nèi)容 242
5.9.1 準備工作 242
5.9.2 實現(xiàn)方式 243
5.9.3 工作方式 244
5.9.4 延伸閱讀 245
5.10 創(chuàng)建模板標簽以調(diào)整請求查詢參數(shù) 245
5.10.1 準備工作 245
5.10.2 實現(xiàn)方式 246
5.10.3 工作方式 248
5.10.4 延伸閱讀 250
第6章 模型管理 251
6.1 簡介 251
6.2 技術(shù)需求 251
6.3 自定義修改列表頁面上的列 251
6.3.1 準備工作 252
6.3.2 實現(xiàn)方式 254
6.3.3 工作方式 255
6.3.4 延伸閱讀 257
6.4 創(chuàng)建可排序的內(nèi)聯(lián) 257
6.4.1 準備工作 257
6.4.2 實現(xiàn)方式 258
6.4.3 工作方式 259
6.4.4 延伸閱讀 260
6.5 創(chuàng)建管理動作 261
6.5.1 準備工作 261
6.5.2 實現(xiàn)方式 261
6.5.3 工作方式 264
6.5.4 延伸閱讀 265
6.6 開發(fā)修改列表過濾器 265
6.6.1 準備工作 265
6.6.2 實現(xiàn)方式 265
6.6.3 工作方式 267
6.6.4 延伸閱讀 268
6.7 修改第三方應(yīng)用程序的應(yīng)用程序標記 268
6.7.1 準備工作 268
6.7.2 實現(xiàn)方式 269
6.7.3 工作方式 269
6.7.4 延伸閱讀 270
6.8 創(chuàng)建一個自定義賬戶應(yīng)用程序 270
6.8.1 準備工作 270
6.8.2 實現(xiàn)方式 270
6.8.3 工作方式 274
6.8.4 延伸閱讀 276
6.9 獲取用戶頭像 277
6.9.1 準備工作 277
6.9.2 實現(xiàn)方式 277
6.9.3 更多內(nèi)容 284
6.9.4 延伸閱讀 284
6.10 將一幅地圖插入至修改表單中 285
6.10.1 準備工作 285
6.10.2 實現(xiàn)方式 289
6.10.3 工作方式 297
6.10.4 延伸閱讀 300
第7章 安全和性能 301
7.1 簡介 301
7.2 技術(shù)需求 301
7.3 表單的跨站點請求偽造安全 302
7.3.1 準備工作 302
7.3.2 實現(xiàn)方式 302
7.3.3 工作方式 304
7.3.4 更多內(nèi)容 304
7.3.5 延伸閱讀 305
7.4 基于內(nèi)容安全政策的請求安全 306
7.4.1 準備工作 306
7.4.2 實現(xiàn)方式 306
7.4.3 工作方式 307
7.4.4 延伸閱讀 309
7.5 使用django-admin-honeypot 309
7.5.1 準備工作 310
7.5.2 實現(xiàn)方式 310
7.5.3 工作方式 310
7.5.4 更多內(nèi)容 311
7.5.5 延伸閱讀 313
7.6 實現(xiàn)密碼驗證 313
7.6.1 準備工作 313
7.6.2 實現(xiàn)方式 313
7.6.3 工作方式 316
7.6.4 更多內(nèi)容 317
7.6.5 延伸閱讀 317
7.7 下載授權(quán)文件 317
7.7.1 準備工作 317
7.7.2 實現(xiàn)方式 317
7.7.3 工作方式 320
7.7.4 延伸閱讀 320
7.8 向圖像中添加動態(tài)水印 321
7.8.1 準備工作 321
7.8.2 實現(xiàn)方式 321
7.8.3 工作方式 324
7.8.4 延伸閱讀 325
7.9 基于Auth0的身份驗證 325
7.9.1 準備工作 325
7.9.2 實現(xiàn)方式 326
7.9.3 工作方式 330
7.9.4 延伸閱讀 332
7.10 緩存方法的返回值 332
7.10.1 準備工作 332
7.10.2 實現(xiàn)方式 332
7.10.3 工作方式 333
7.10.4 更多內(nèi)容 334
7.10.5 延伸閱讀 335
7.11 使用Memcached緩存Django視圖 335
7.11.1 準備工作 335
7.11.2 實現(xiàn)方式 336
7.11.3 工作方式 337
7.11.4 延伸閱讀 337
7.12 使用Redis緩存Django視圖 337
7.12.1 準備工作 338
7.12.2 實現(xiàn)方式 338
7.12.3 工作方式 339
7.12.4 更多內(nèi)容 340
7.12.5 延伸閱讀 340
第8章 層次結(jié)構(gòu) 341
8.1 簡介 341
8.2 技術(shù)需求 343
8.3 利用django-mptt創(chuàng)建層次分類 343
8.3.1 準備工作 343
8.3.2 實現(xiàn)方式 343
8.3.3 工作方式 345
8.3.4 延伸閱讀 346
8.4 利用django-mptt-admin創(chuàng)建分類管理界面 346
8.4.1 準備工作 347
8.4.2 實現(xiàn)方式 347
8.4.3 工作方式 348
8.4.4 延伸閱讀 349
8.5 利用django-mptt在模板中渲染分類 350
8.5.1 準備工作 351
8.5.2 實現(xiàn)方式 351
8.5.3 工作方式 352
8.5.4 更多內(nèi)容 353
8.5.5 延伸閱讀 353
8.6 利用django-mptt和單選字段在表單中選擇分類 353
8.6.1 準備工作 353
8.6.2 實現(xiàn)方式 354
8.6.3 工作方式 355
8.6.4 延伸閱讀 356
8.7 利用django-mptt在表單中通過復(fù)選框列表選擇多個分類 356
8.7.1 準備工作 357
8.7.2 實現(xiàn)方式 357
8.7.3 工作方式 362
8.7.4 延伸閱讀 363
8.8 利用django-treebeard創(chuàng)建層次分類 363
8.8.1 準備工作 364
8.8.2 實現(xiàn)方式 364
8.8.3 工作方式 365
8.8.4 更多內(nèi)容 366
8.8.5 延伸閱讀 367
8.9 利用django-treebeard創(chuàng)建分類管理界面 367
8.9.1 準備工作 367
8.9.2 實現(xiàn)方式 367
8.9.3 工作方式 368
8.9.4 延伸閱讀 370
第9章 導(dǎo)入和導(dǎo)出數(shù)據(jù) 371
9.1 簡介 371
9.2 技術(shù)需求 371
9.3 從本地CSV文件中導(dǎo)入數(shù)據(jù) 371
9.3.1 準備工作 372
9.3.2 實現(xiàn)方式 374
9.3.3 工作方式 376
9.3.4 延伸閱讀 377
9.4 從本地Excel文件中導(dǎo)入數(shù)據(jù) 378
9.4.1 準備工作 378
9.4.2 實現(xiàn)方式 378
9.4.3 工作方式 380
9.4.4 延伸閱讀 381
9.5 從外部JSON文件中導(dǎo)入數(shù)據(jù) 381
9.5.1 準備工作 382
9.5.2 實現(xiàn)方式 384
9.5.3 工作方式 387
9.5.4 延伸閱讀 388
9.6 從外部XML文件中導(dǎo)入數(shù)據(jù) 388
9.6.1 準備工作 388
9.6.2 實現(xiàn)方式 389
9.6.3 工作方式 392
9.6.4 更多內(nèi)容 393
9.6.5 延伸閱讀 393
9.7 針對搜索引擎準備分頁網(wǎng)站地圖 394
9.7.1 準備工作 394
9.7.2 實現(xiàn)方式 396
9.7.3 工作方式 397
9.7.4 更多內(nèi)容 398
9.7.5 延伸閱讀 398
9.8 創(chuàng)建可過濾的RSS訂閱 398
9.8.1 準備工作 398
9.8.2 實現(xiàn)方式 401
9.8.3 工作方式 404
9.8.4 延伸閱讀 404
9.9 使用Django REST框架創(chuàng)建一個API 404
9.9.1 準備工作 404
9.9.2 實現(xiàn)方式 405
9.9.3 工作方式 406
9.9.4 延伸閱讀 410
第10章 其他內(nèi)容 411
10.1 簡介 411
10.2 技術(shù)需求 411
10.3 使用Django shell 412
10.3.1 準備工作 412
10.3.2 實現(xiàn)方式 412
10.3.3 工作方式 416
10.3.4 延伸閱讀 416
10.4 使用數(shù)據(jù)庫查詢表達式 416
10.4.1 準備工作 416
10.4.2 實現(xiàn)方式 418
10.4.3 工作方式 421
10.4.4 延伸閱讀 423
10.5 slugify()函數(shù)的猴子補丁以獲得更好的國際支持 423
10.5.1 準備工作 423
10.5.2 實現(xiàn)方式 424
10.5.3 更多內(nèi)容 424
10.5.4 延伸閱讀 425
10.6 切換調(diào)試工具欄 425
10.6.1 準備工作 425
10.6.2 實現(xiàn)方式 426
10.6.3 工作方式 428
10.6.4 延伸閱讀 429
10.7 使用ThreadLocalMiddleware 429
10.7.1 準備工作 430
10.7.2 實現(xiàn)方式 430
10.7.3 工作方式 431
10.7.4 延伸閱讀 432
10.8 使用信號通知管理員有關(guān)新的條目 432
10.8.1 準備工作 432
10.8.2 實現(xiàn)方式 433
10.8.3 工作方式 434
10.8.4 延伸閱讀 435
10.9 檢查缺失設(shè)置項 435
10.9.1 準備工作 435
10.9.2 實現(xiàn)方式 435
10.9.3 工作方式 437
10.9.4 延伸閱讀 438
第11章 測試 439
11.1 簡介 439
11.2 需求條件 439
11.3 利用Mock測試視圖 440
11.3.1 準備工作 440
11.3.2 實現(xiàn)方式 440
11.3.3 工作方式 442
11.3.4 更多內(nèi)容 443
11.3.5 延伸閱讀 443
11.4 利用Selenium測試用戶界面 443
11.4.1 準備工作 444
11.4.2 實現(xiàn)方式 444
11.4.3 工作方式 448
11.4.4 延伸閱讀 449
11.5 利用Django REST框架測試API 449
11.5.1 準備工作 449
11.5.2 實現(xiàn)方式 449
11.5.3 工作方式 454
11.5.4 延伸閱讀 454
11.6 確保測試覆蓋率 455
11.6.1 準備工作 455
11.6.2 實現(xiàn)方式 455
11.6.3 工作方式 457
11.6.4 延伸閱讀 457
第12章 部署 459
12.1 簡介 459
12.2 技術(shù)需求 460
12.3 發(fā)布可復(fù)用的Django應(yīng)用程序 460
12.3.1 準備工作 460
12.3.2 實現(xiàn)方式 460
12.3.3 工作方式 464
12.3.4 延伸閱讀 464
12.4 針對預(yù)發(fā)布環(huán)境利用mod_wsgi在Apache上部署 464
12.4.1 準備工作 464
12.4.2 實現(xiàn)方式 465
12.4.3 工作方式 473
12.4.4 延伸閱讀 475
12.5 針對產(chǎn)品環(huán)境利用mod_wsgi在Apache上部署 475
12.5.1 準備工作 475
12.5.2 實現(xiàn)方式 476
12.5.3 工作方式 480
12.5.4 延伸閱讀 481
12.6 針對預(yù)發(fā)布環(huán)境在Nginx和Gunicorn上部署 481
12.6.1 準備工作 481
12.6.2 實現(xiàn)方式 482
12.6.3 工作方式 490
12.6.4 延伸閱讀 492
12.7 針對產(chǎn)品環(huán)境在Nginx和Gunicorn上部署 492
12.7.1 準備工作 492
12.7.2 實現(xiàn)方式 493
12.7.3 工作方式 496
12.7.4 延伸閱讀 497
第13章 維護 499
13.1 簡介 499
13.2 技術(shù)需求 499
13.3 創(chuàng)建和恢復(fù)MySQL數(shù)據(jù)庫備份 499
13.3.1 準備工作 500
13.3.2 實現(xiàn)方式 500
13.3.3 工作方式 503
13.3.4 延伸閱讀 504
13.4 創(chuàng)建和恢復(fù)PostgreSQL數(shù)據(jù)庫備份 504
13.4.1 準備工作 504
13.4.2 實現(xiàn)方式 504
13.4.3 工作方式 507
13.4.4 延伸閱讀 509
13.5 設(shè)置常規(guī)作業(yè)的定時任務(wù) 509
13.5.1 準備工作 509
13.5.2 實現(xiàn)方式 509
13.5.3 工作方式 511
13.5.4 更多內(nèi)容 512
13.5.5 延伸閱讀 512
13.6 日志事件 512
13.6.1 準備工作 513
13.6.2 實現(xiàn)方式 513
13.6.3 工作方式 516
13.6.4 延伸閱讀 517
13.7 通過電子郵件獲取詳細的錯誤報告 517
13.7.1 準備工作 517
13.7.2 實現(xiàn)方式 518
13.7.3 更多內(nèi)容 519
13.7.4 延伸閱讀 520