Django入門與實踐 17-26章總結
阿新 • • 發佈:2018-09-05
ase 繼續 有意 部分 賬戶 內置 put 運行 術語
Django入門與實踐-第17章:保護視圖 Django 有一個內置的視圖裝飾器 來避免它被未登錄的用戶訪問: 現在如果用戶沒有登錄,將被重定向到登錄頁面: 現在嘗試登錄,登錄成功後,應用程序會跳轉到原來所在的位置。 Django入門與實踐-第18章:訪問已登錄用戶 現在我麽可以改進 new_topic 視圖,將發布主題的用戶設置當前登錄的用戶,取代之前直接從數據庫查詢出來的第一個用戶, 之前這份代碼是臨時的,因為那時候還沒有方法去獲取登錄用戶,但是現在可以了: 有兩個關鍵字參數,pk用於唯一標識版塊(Board),topic_pk用於唯一標識該回復來自哪個主題。 Django入門與實踐-第19章:主題回復 值得註意的是:在視圖函數replay_topic中,我們使用 topic_pk ,因為我們引用的是函數的關鍵字參數, 而在new_topic視圖中,我們使用的是 topic.pk ,因為 topic 是一個對象(Topic模型的實例對象), .pk 是這個實例對象的一個屬性,這兩種細微的差別,其實區別很大,別搞混了。 Django入門與實踐-第20章:QuerySets(查詢結果集) 現在我們花點時間來探索關於模型的 API。首先,我們來改進主題: 有3個任務: 顯示每個板塊的總主題數 顯示每個板塊的總回復數 顯示每個板塊的最後發布者和日期 在實現這些功能前,我們先使用Python終端 因為我們要在Python終端嘗試,所以,把所有的 models 定義一個__str__ 方法是個好主意 在 Post 模型中,使用了 Truncator 工具類,這是將一個將字符串截取為任意長度字符的簡便方法(這?我們使用30個字符) 雙下劃線的 topic__board 用於通過模型關系來定位,在內部, Django 在Board-Topic-Post之間構建了橋梁,構建SQL查詢來獲取屬於指定版塊下面的帖子回復。 最後一個任務是標識版塊下?的最後?條回復 Django入門與實踐-第21章:遷移 遷移(Migration)是Django做Web開發的基本組成部分,它使得我們在演進應用的models時,它能使得models文件與數據庫保持同步。 當我們第一次運行命令 python manage.py migrate 的時候,Django 會抓取所有遷移文件然後?成數據庫 schema。 當Django應用了遷移之後,有一個特殊的表叫做django_migrations,在這個表中,Django註冊了所有已經的遷移記錄。 我們添加了一個 PositiveIntegerField ,因為這個字段將要存儲的是頁面的瀏覽量,不可能是一個負數 在這節課中,我們在留言板的基礎功能上取得了一些進步,還剩下一些東西等待去實現, 比如:編輯帖子、我的賬戶(更改個人信息)等等。之後我們將提供markdown語法和列表的分頁功能。 Django入門與實踐-第22章:基於類的視圖 歡迎來到系列教程的第六部分!在這篇教程中,我們將詳細探討基於類的視圖(簡稱CBV)。 我們也將重構一些現有的視圖,以便利用內置的基於類的通用視圖(Generic Class-Based Views)。 這篇教程我們還將討論許多其他主題,例如如何使用分頁,如何使用markdown以及如何添加簡單的編輯器。 我們還將探索一個名為 Humanize的內置軟件包,用於對數據進行“人為操作”。 到頭來,所有的Django視圖其實都是函數。即便是CBV。在類的底層,它完成了所有的功能並最終返回一個視圖函數。 在我們繼續教程之前,讓我們清楚這三個術語的含義: 基於函數的視圖(FBV) 基於類的視圖(CBV) 基於類的通用視圖(GCBV) FBV是Django視圖中最簡單的表示:它就是一個接收 HttpRequest 對象並返回一個 HttpResponse 的函數。 CBV是每個Django視圖都被定義為一個擴展 django.views.generic.view抽象類後的 Python 類。 GCBV是可以解決一些具體問題的內置的CBV集合,比如列表視圖,創建,更新和刪除視圖等。 基於類的視圖 (CBV) CBV是View類的集成類。這裏的主要區別在於請求是以HTTP方法命名的類用法內處理的,例如GET ,POST ,PUT ,HEAD 等。 所以,在這裏,我們不需要做一個條件來判斷請求是一個 POST 還是它是一個 GET 。 代碼會直接跳轉到正確的方法中。在 View 類中內部處理了這個邏輯。 總之,關於CBV的好處是我們可以在類裏面添加更多的方法,也許可以這樣做: 基於類的通過視圖(GCBV) 接下來關於GCBV。這是一個不同的情況。正如我前面提到的,GCBV是內置CBV的常見用例。 它們的實現往往會大量使用多重繼承(混合繼承)和其他面向對象的策略。 列表視圖 我們現在可以利用 CBV 的功能來重構一些現有的視圖。以主頁為例,我們就先從數據庫中抓取所有的 boards 並將其羅列在HTML中: Django入門與實踐-第23章:分頁實現 我們可以非常容易地使用 CBV 來實現分頁功能。但首先我想手工分頁,這樣就更有助於我們理解背後的機制,這樣它就不那麽神秘了。 實際上對 boards 列表視圖分頁並沒有意義,因為我們不期望有很多boards。但無疑對於主題列表和帖子列表來說是需要一些分頁的。 FBV 分頁 這裏是我們如何使用 FBV 來實現分頁: GCBV 分頁 下面,相同的實現,但這次使用ListView。 可復用的分頁模板 就像我們在 form.html 中封裝模板時做的一樣,我們也可以為分頁的HTML代碼來創建類似的東西。 我們來對主題帖子頁面進行分頁,進而找到一種復用分頁組件的方法。 現在,我們從topics.html模板中獲取分頁部分的html代碼片, 並在templates/includes 文件夾下面創建一個名為 pagination.html 的新文件,和 forms.html 同級目錄: Django入門與實踐-第24章:我的賬戶視圖 好的,那麽,這部分將是我們最後的一個視圖。之後,我們將專心來改進現有功能。 Django入門與實踐-第25章:Markdown 支持 讓我們在文本區域添加 Markdown 支持來改善用戶體驗。你會看到要實現這個功能非常簡單。 首先,我們安裝一個名為 Python-Markdown 的庫: pip install markdown 默認情況下,這個插件會將它找到的第一個文本區域轉換為 markdown 編輯器。所以這點代碼應該就足夠了: Django入門與實踐-第26章:個性化工具 我覺得只添加內置的個性化(humanize)包就會很不錯。它包含一組為數據添加“個性化(human touch)”的工具集。 例如,我們可以使用它來更自然地顯示日期和時間字段。我們可以簡單地顯示:“2分鐘前”,而不是顯示整個日期。 我們所要做的就是在模板中加載 {%load humanize%} 這個模板標簽,然後在模板中使用過濾器: {{ topic.last_updated|naturaltime }}
Django入門與實踐 17-26章總結