Python是目前非常受歡迎的程序設計語言,本書通過對Python語言使用多的Django Web Framework的介紹,讓讀者可以輕松制作出全功能的動態網站。 本書分4部分,以16堂課來介紹Python新手使用Django架站的要點。部分(第1~3堂)以一個小型的個人博客網站為主軸,介紹如何快速建立一個實用的Django網站;第二部分(第4~7堂)是Django架構深入剖析,詳細分析Django的MVC/MTV架構;第三部分(第8~11堂)為實用網站開發技巧;第四部分(第12~16堂)為實用網站開發教學,從設計、規劃到實踐,逐步指導讀者在自己的主機環境下構建出有趣實用的內容。 本書既可作為希望快速上手Python Django的初學者的參考書籍,也可作為Python培訓學校在Python Django方面的培訓教程。
本書免費贈送范例網站的源碼和網站文件夾結構及其文件,下載地址:pan.baidu.com/s/1pLIuFXp(注意區分數字和英文字母大小寫)1.詳細的步驟教學,按圖操作,快速上手2.深入分析Django的MVC/MTV架構3.多個實用的網站開發范例,即學即用到個人網站4.從設計、規劃到實踐,16堂課使你輕松成為網絡架站高手
何敏煌,中國臺灣交通大學信息科學所博士。臺灣暢銷書作者.
目 錄
第1堂 網站開發環境的建立 1
1.1 網站的基礎知識 1
1.1.1 網站的運行流程 1
1.1.2 Python/Django扮演的角色 2
1.1.3 使用Python/Django建立網站的優勢 3
1.2 建立網站開發流程 3
1.2.1 開發流程簡介 4
1.2.2 在Windows中建立Linux虛擬機 5
1.2.3 在Mac OS中安裝Linux虛擬機 11
1.2.4 在Linux虛擬機中創建Python Django開發環境 17
1.2.5 設置SSH、PuTTY以及FTP服務器 18
1.2.6 安裝Notepad 程序編輯器 22
1.3 活用版本控制系統 26
1.3.1 版本控制系統Git簡介 26
1.3.2 申請Bitbucket賬號 26
1.3.3 在虛擬機中連接Bitbucket 29
1.3.4 在不同的計算機之間開發同一個網站 31
1.4 其他網站項目開發環境的安裝建議 32
1.4.1 在Windows 10中創建開發環境 32
1.4.2 在Mac OS中創建開發環境 35
1.4.3 在Cloud9中創建開發環境 37
1.4.4 在DigitalOcean VPS中創建開發環境 39
1.5 習題 40
第2堂 Django網站快速入門 41
2.1 個人博客網站規劃 41
2.1.1 博客網站的需求與規劃 41
2.1.2 產生及時個網站框架 41
2.1.3 Django文件夾與文件解析 44
2.2 創建博客數據表 46
2.2.1 數據庫與Django的關系 46
2.2.2 定義數據模型 47
2.2.3 啟動admin管理界面 48
2.2.4 讀取數據庫中的內容 52
2.3 網址對應與頁面輸出 55
2.3.1 創建網頁輸出模板template 55
2.3.2 網址對應urls.py 60
2.3.3 共享模板的使用 62
2.4 高級網站功能的運用 65
2.4.1 JavaScript以及CSS文件的引用 65
2.4.2 圖像文件的應用 69
2.4.3 在主網頁顯示文章摘要 71
2.4.4 博客文章的HTML內容處理 73
2.4.5 Markdown語句解析與應用 75
2.5 習題 77
第3堂 讓網站上線 78
3.1 在DigitalOcean上部署 78
3.1.1 申請賬號與創建虛擬主機 78
3.1.2 安裝Apache網頁服務器及Django執行環境 82
3.1.3 修改settings.py、000-default.conf等相關設置 83
3.1.4 創建域名以及多平臺設置 86
3.2 在Heroku上部署 89
3.2.1 Heroku賬號申請與環境設置 89
3.2.2 修改網站的相關設置 91
3.2.3 上傳網站到Heroku主機 92
3.2.4 Heroku主機的操作 96
3.3 在Google Cloud Platform上部署 97
3.3.1 Google Cloud Platform的介紹 98
3.3.2 Google Computing的啟用與設置 101
3.3.3 Google App Engine的說明與設置 104
3.4 習題 111
第4堂 深入了解Django的MVC架構 112
4.1 Django的MVC架構簡介 112
4.1.1 MVC架構簡介 112
4.1.2 Django的MTV架構 113
4.1.3 Django網站的構成以及配合 114
4.1.4 在Django MTV架構下的網站開發步驟 115
4.2 Model簡介 116
4.2.1 在models.py中創建數據表 116
4.2.2 在admin.py中創建數據表管理界面 119
4.2.3 在Python Shell中操作數據表 123
4.2.4 數據的查詢與編輯 125
4.3 View簡介 127
4.3.1 建立簡易的HttpResponse網頁 127
4.3.2 在views.py中顯示查詢數據列表 129
4.3.3 網址欄參數處理的方式 131
4.4 Template簡介 133
4.4.1 創建template文件夾與文件 133
4.4.2 傳送變量到template文件中 134
4.4.3 在template中處理列表變量 137
4.5 最終版本摘要 138
4.6 習題 142
第5堂 網址的對應與委派 143
5.1 Django網址架構 143
5.1.1 URLconf簡介 143
5.1.2 urlpatterns的Regular Expression語法說明 145
5.1.3 驗證RE設計URL的正確性 148
5.2 高級設置技巧 149
5.2.1 參數的傳送 149
5.2.2 include其他整組的urlpatterns設置 150
5.2.3 URLconf的反解功能 151
5.3 習題 152
第6堂 Template深入探討 153
6.1 Template的設置與運行 153
6.1.1 settings.py設置 153
6.1.2 創建templates文件 155
6.1.3 在templates文件中使用現有的網頁框架 156
6.1.4 直播電視網站應用范例 157
6.1.5 在template中使用static文件 161
6.2 高級Template技巧 163
6.2.1 Template模板的繼承 163
6.2.2 共享模板的使用范例 165
6.3 Template語言 166
6.3.1 判斷指令 167
6.3.2 循環指令 168
6.3.3 過濾器與其他語法標記 173
6.4 習題 176
第7堂 Models與數據庫 177
7.1 網站與數據庫 177
7.1.1 數據庫簡介 177
7.1.2 規劃網站需要的數據庫 178
7.1.3 數據表內容設計 181
7.1.4 models.py設計 182
7.2 活用Model制作網站 183
7.2.1 建立網站 183
7.2.2 制作網站模板 186
7.2.3 制作多數據表整合查詢網頁 188
7.2.4 調整admin管理網頁的外觀 192
7.3 在Django中使用MySQL數據庫系統 194
7.3.1 安裝開發環境中的MySQL連接環境(Ubuntu) 194
7.3.2 安裝開發環境中的MySQL連接環境(Windows) 195
7.3.3 使用Google云端主機的商用SQL服務器 199
7.4 習題 203
第8堂 網站窗體的應用 204
8.1 網站與窗體 204
8.1.1 HTML 窗體簡介 204
8.1.2 活用窗體的標簽 208
8.1.3 建立本堂課范例網站的數據模型 210
8.1.4 網站窗體的建立與數據顯示 212
8.1.5 接收窗體數據存儲于數據庫中 214
8.1.6 加上刪除帖文的功能 215
8.2 基礎窗體類的應用 217
8.2.1 使用POST傳送窗體數據 218
8.2.2 結合窗體和數據庫 222
8.2.3 數據接收與字段的驗證方法 226
8.2.4 使用第三方服務發送電子郵件 229
8.3 模型窗體類ModelForm的應用 233
8.3.1 ModelForm的使用 233
8.3.2 通過ModelForm產生的窗體存儲數據 235
8.3.3 為窗體加上防機器人的驗證機制 237
8.4 習題 240
第9堂 網站的Session功能 241
9.1 Session簡介 241
9.1.1 復制Django網站 241
9.1.2 Cookie簡介 242
9.1.3 使用Cookie建立網站登錄功能 243
9.1.4 開始使用Session 249
9.2 活用Session 250
9.2.1 建立用戶數據表 250
9.2.2 整合Django的信息顯示框架messages framework 257
9.3 Django auth用戶驗證 260
9.3.1 使用Django的用戶驗證系統 260
9.3.2 增加User的字段 264
9.3.3 顯示新增加的User字段 266
9.3.4 應用auth用戶驗證存取數據庫 268
9.4 習題 274
第10堂 網站用戶的注冊與管理 275
10.1 建立網站用戶的自動化注冊功能 275
10.1.1 django-registration安裝與設置 275
10.1.2 建立django-registration所需的模板 276
10.1.3 整合用戶注冊功能到分享日記網站 280
10.2 Pythonanywhere.com免費Python網站開發環境 285
10.2.1 注冊Pythonanywhere.com賬號 286
10.2.2 在Pythonanywhere免費網站中建立虛擬機環境以及Django網站 292
10.2.3 建立投票網站的基本架構 298
10.3 使用Facebook驗證賬號操作實踐 307
10.3.1 在Pythonanywhere中安裝django-allauth與設置 307
10.3.2 到Facebook開發者網頁申請驗證機制 309
10.3.3 在網站中識別用戶的登錄狀態 314
10.3.4 客戶化django-allauth頁面 318
10.4 習題 321
第11堂 社交網站應用實踐 322
11.1 投票網站的規劃與調整 322
11.1.1 網站功能與需求 322
11.1.2 數據表與頁面設計 324
11.1.3 網站的轉移 327
11.1.4 移動設備的考慮 329
11.2 深入探討django-allauth 331
11.2.1 django-allauth的Template標簽 331
11.2.2 django-allauth的Template頁面 333
11.2.3 獲取Facebook用戶的信息 335
11.3 投票網站功能解析 336
11.3.1 首頁的分頁顯示功能 337
11.3.2 自定義標簽并在首頁顯示目前的投票數 339
11.3.3 使用AJAX和jQuery改進投票的效果 341
11.3.4 避免重復投票的方法 348
11.3.5 新建Twitter賬號鏈接 350
11.4 習題 355
第12堂 電子商店網站實踐 356
12.1 打造迷你電商網站 356
12.1.1 復制網站,不要從零開始 356
12.1.2 創建網站所需要的數據表 358
12.1.3 上傳照片的方法django-filer 362
12.1.4 把django-filer的圖像文件添加到數據表中 367
12.2 增加網站功能 370
12.2.1 分類查看產品 370
12.2.2 顯示詳細的產品內容 374
12.2.3 購物車功能 376
12.2.4 建立訂單功能 381
12.3 電子支付功能 390
12.3.1 建立付款流程 390
12.3.2 建立PayPal付款鏈接 393
12.3.3 接收PayPal付款完成通知 400
12.3.4 測試PayPal付款功能 401
12.4 習題 407
第13堂 全功能電子商店網站 django-oscar實踐 408
13.1 Django購物網站Oscar的安裝與使用 408
13.1.1 電子購物網站模板 408
13.1.2 Django Oscar購物車系統測試網站安裝 409
13.2 建立Oscar的應用網站 411
13.2.1 安裝前的準備 412
13.2.2 建立網站的域名 412
13.2.3 調整Apache2配置文件 414
13.2.4 建立Django Oscar購物網站項目 415
13.2.5 加上電子郵件的發送功能 422
13.2.6 簡單地修改Oscar網站的設置 424
13.2.7 增加PayPal在線付款功能 427
13.3 自定義Oscar網站 432
13.3.1 建立自己的templates,打造客戶化的外觀 433
13.3.2 網站的中文翻譯 444
13.4 習題 445
第14堂 二級網絡域名管理網站實踐 446
14.1 建立網站前的準備工作 446
14.1.1 什么是二級網絡域名以及網絡域名代管服務 446
14.1.2 申請網絡域名以及網絡域名代管服務DNSimple 447
14.1.3 設置網站主機的空間 450
14.1.4 建立網站框架 450
14.2 建立會員網站 452
14.2.1 加入電子郵件功能 452
14.2.2 安裝與使用django-registration 453
14.2.3 安裝dnsimple模塊 459
14.3 網站功能設計 461
14.3.1 建立網站首頁的說明頁面 462
14.3.2 創建數據表 463
14.3.3 建立網址管理頁面 464
14.3.4 Subdomain數據表的存取 466
14.3.5 整合到dnsimple.com中 469
14.4 習題 475
第15堂 名言佳句產生器網站實踐 477
15.1 建立網站前的準備 477
15.1.1 準備網站所需的素材 477
15.1.2 圖文整合練習 478
15.1.3 建立可隨機顯示圖像的網站 479
15.2 產生器功能的實現 483
15.2.1 建立產生器界面 483
15.2.2 產生的文件名 486
15.2.3 開始合并并產生圖像文件 486
15.2.4 準備多個背景圖像文件以供選擇 490
15.3 自定義圖像文件功能 496
15.3.1 加入會員注冊功能 496
15.3.2 建立上傳文件的界面 497
15.3.3 上傳文件的方法 502
15.3.4 實時產生結果 504
15.4 習題 506
第16堂 課程回顧與您的下一步 507
16.1 善加運用網站資源 507
16.2 部署上線的注意事項 510
16.3 SSL設置實踐 513
16.4 程序代碼和網站測試的重要性 525
16.5 其他Python框架 528
16.6 您的下一步 528
第9堂 網站的Session功能很多網站都會提供用戶登錄的功能,在用戶登錄之后會呈現客戶化的數據,不過中間過程中使用網站上的多少個網頁,網站都能夠識別同一個用戶,一直到用戶注銷或關閉瀏覽器為止。在瀏覽器中記住同一個用戶的方法,一般都是使用Session(會話階段),本堂課就為讀者介紹如何在Django網站中使用Session的特性提升網站的功能。9.1 Session簡介Session最重要的目的就是讓網站記得用戶,也就是瀏覽這個網站的人。因為因特網HTTP的特性,理論上每一次來自于瀏覽器的請求(request)都是獨立的,和前后的請求沒有關系,所以如果沒有特別的機制,網頁服務器是沒有辦法識別前后瀏覽行為是不是來自于同一個人的。Session機制的目的就是要解決這個問題。9.1.1 復制Django網站這一堂課開始的范例網站我們并不打算從頭開始,而是使用上一堂課的ch08www網站,復制整個網站之后再進行修改,這樣就可以省下不少工作。在開發階段復制Django網站的方法很簡單,只要把整個文件夾復制過來,再針對一些文件的內容進行修改就可以了。那么有哪些文件的內容需要修改呢?只有manage.py和ch08www文件夾的小部分文件。在Linux和Mac OS操作系統下可以使用grep指令找出和項目有關的字符串(例如ch08www),而在Windows操作系統下也有類似的工具,那就是findstr,用法如下:(VENV) I:\myDjango\ch08www findstr/s "ch08" .pymanage.py: os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ch08www.settings")ch08www\settings.py:Django settings for ch08www project.ch08www\settings.py:ROOT_URLCONF = 'ch08www.urls'ch08www\settings.py:WSGI_APPLICATION = 'ch08www.wsgi.application'ch08www\urls.py:"""ch08www URL Configurationch08www\wsgi.py:WSGI config for ch08www project.ch08www\wsgi.py:os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ch08www.settings")全部要修改的地方就這幾個文件,在本例中把所有ch08www改為ch09www就算是完成了網站的復制工作。9.1.2 Cookie簡介在WWW網站開始流行后,很多網站的設計者都認識到識別用戶的重要性,有時候就算是沒有用戶登錄的操作,網站也會通過客戶端的瀏覽器在客戶端某些被限定的硬盤位置中寫入某些數據,也就是所謂的Cookie。如果瀏覽器的這項功能沒有被關閉,網站就可以在每次瀏覽器發出請求的時候先讀取特定的數據,如果有就把這些數據顯示到特定客戶常用的網頁。這也是在瀏覽某些網站的時候,這些網站會記住我們之前的一些瀏覽行為的原因。在Chrome瀏覽器的高級設置中可以找到和Cookie設置有關的數據,如圖9-1所示。 圖9-1 在Chrome中設置是否接受Cookie我們使用Django設計的網站,也可以使用Cookie來檢查這個瀏覽器的請求者是否曾經訪問過我們的網站。在使用前可以使用下面這段程序代碼來檢查客戶端的瀏覽器設置是否接受Cookie:def index(request, pid=None, del_pass=None): template = get_template('index.html') if request.session.test_cookie_worked(): request.session.delete_test_cookie() message = "cookie supported!" else: message = 'cookie not supported' request.session.set_test_cookie() html = template.render(locals())第9堂 網站的Session功能很多網站都會提供用戶登錄的功能,在用戶登錄之后會呈現客戶化的數據,不過中間過程中使用網站上的多少個網頁,網站都能夠識別同一個用戶,一直到用戶注銷或關閉瀏覽器為止。在瀏覽器中記住同一個用戶的方法,一般都是使用Session(會話階段),本堂課就為讀者介紹如何在Django網站中使用Session的特性提升網站的功能。9.1 Session簡介Session最重要的目的就是讓網站記得用戶,也就是瀏覽這個網站的人。因為因特網HTTP的特性,理論上每一次來自于瀏覽器的請求(request)都是獨立的,和前后的請求沒有關系,所以如果沒有特別的機制,網頁服務器是沒有辦法識別前后瀏覽行為是不是來自于同一個人的。Session機制的目的就是要解決這個問題。9.1.1 復制Django網站這一堂課開始的范例網站我們并不打算從頭開始,而是使用上一堂課的ch08www網站,復制整個網站之后再進行修改,這樣就可以省下不少工作。在開發階段復制Django網站的方法很簡單,只要把整個文件夾復制過來,再針對一些文件的內容進行修改就可以了。那么有哪些文件的內容需要修改呢?只有manage.py和ch08www文件夾的小部分文件。在Linux和Mac OS操作系統下可以使用grep指令找出和項目有關的字符串(例如ch08www),而在Windows操作系統下也有類似的工具,那就是findstr,用法如下:(VENV) I:\myDjango\ch08www>findstr/s "ch08" .pymanage.py: os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ch08www.settings")ch08www\settings.py:Django settings for ch08www project.ch08www\settings.py:ROOT_URLCONF = 'ch08www.urls'ch08www\settings.py:WSGI_APPLICATION = 'ch08www.wsgi.application'ch08www\urls.py:"""ch08www URL Configurationch08www\wsgi.py:WSGI config for ch08www project.ch08www\wsgi.py:os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ch08www.settings")全部要修改的地方就這幾個文件,在本例中把所有ch08www改為ch09www就算是完成了網站的復制工作。9.1.2 Cookie簡介在WWW網站開始流行后,很多網站的設計者都認識到識別用戶的重要性,有時候就算是沒有用戶登錄的操作,網站也會通過客戶端的瀏覽器在客戶端某些被限定的硬盤位置中寫入某些數據,也就是所謂的Cookie。如果瀏覽器的這項功能沒有被關閉,網站就可以在每次瀏覽器發出請求的時候先讀取特定的數據,如果有就把這些數據顯示到特定客戶常用的網頁。這也是在瀏覽某些網站的時候,這些網站會記住我們之前的一些瀏覽行為的原因。在Chrome瀏覽器的高級設置中可以找到和Cookie設置有關的數據,如圖9-1所示。 圖9-1 在Chrome中設置是否接受Cookie我們使用Django設計的網站,也可以使用Cookie來檢查這個瀏覽器的請求者是否曾經訪問過我們的網站。在使用前可以使用下面這段程序代碼來檢查客戶端的瀏覽器設置是否接受Cookie:def index(request, pid=None, del_pass=None): template = get_template('index.html') if request.session.test_cookie_worked(): request.session.delete_test_cookie() message = "cookie supported!" else: message = 'cookie not supported' request.session.set_test_cookie() html = template.render(locals())
return HttpResponse(html)上述程序中使用了request.session.test_cookie_worked()函數,如果支持Cookie,就會返回True,反之則返回False。由于Cookie的工作原理是每一次request的前后都是獨立的,因此在測試是否支持Cookie寫入功能時要先寫入一次測試的數據,然后在下一次request時才能夠讀出來,看看有沒有之前寫入的測試數據。因此,在程序中(本程序的倒數第3行)要先執行request.session.set_test_cookie(),而在下一次同一瀏覽器request時才能夠判斷,這是要注意的地方。如果Chrome瀏覽器進行了圖9-1所示的設置,我們的網頁就會判斷此瀏覽器不支持Cookie(刷新之后),如圖9-2所示。 圖9-2 在網頁中顯示本瀏覽器不支持Cookie9.1.3 使用Cookie建立網站登錄功能在確定能夠讀取用戶的瀏覽器Cookie之后,就可以使用這種方式來實現網站的登錄和注銷功能了。在本小節先以一個簡單的范例作為示范。首先,在header.html中修改以下信息,讓網站的菜單可以根據用戶登錄與否決定要顯示的內容: 分享日記
此書不錯,對我有幫助
趕著活動買的,很合適
完全一致,非常滿意真的很喜歡,完全超出期望值,發貨速度非常快,包裝非常仔細、嚴實
還不錯這本書,經常在當當買書,各方面都不錯,雖然偶爾物流速度會慢點
垃?;?。當當,媽的賣書竟然這種包裝,我買二手書都沒這么慘,還沒用書就這樣了。。。。書還沒看。就想來差評了
很好,很實用
書講解的比較全面, 實例也比較詳細
django更新換代很快,國內翻譯的教程很多,但是很多材料都過時了,本書雖然也是用的老版本,但是案例足夠充實,足夠能入門,個人感覺比翻譯的官方文檔要好,如果要學django,可能是中文書唯一的書了。