1. 程式人生 > >Django入門與實踐 17-26章總結

Django入門與實踐 17-26章總結

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章總結