基於類的視圖(Class-based view)是Django 1.3引入的新的視圖編寫方式,用於取代之前基於函數(Function-based)方式。 藉助於OO和Python中方便的多重繼承特性,基於類的視圖能夠提供更好的抽象與複用能力。 新的通用視圖將更加優雅。django
Django的文檔較爲豐富,但在實際開發中每每仍顯得不夠,不少時候仍是須要深刻到源代碼當中一探究竟。爲此,仔細整理了一下基於類的視圖的實現方式。指望對之後的開發可以提供更加清晰、直接的參考。函數
說明: Django大量應用了多重繼承特性。將一些通用的功能性代碼拆分混入類(Mixin),須要這些混入類的代碼時,只須要將混入類加入到類的繼承列表中便可——請注意順序,左側的類具備較高權限,將覆蓋右側繼承類中的同名函數。爲了說明方便,將這些混入類(Mixin)成爲"工具類"。工具
全部的視圖相關代碼,均存放與django/views/generic目錄中:對象
base.py 保存視圖的抽象類,TemplateView和RedirectView,及工具類TemplateResponseMixin的代碼繼承
create_update.py 基於函數的通用視圖。已標記爲deprecated開發
date_based.py 基於函數的日期相關通用視圖。已標記爲deprecated文檔
dates.py 新的基於類的日期相關通用視圖。用於取代date_based.py源碼
detail.py 基於類的單個對象顯示相關的視圖和工具類it
edit.py 基於類的對象編輯相關的視圖和工具類io
list.py 基於類的對象列表顯示相關視圖和工具類
list_detail.py 基於函數的列表、顯示函數。已標記爲deprecated
simply.py 基於函數的工具經常使用工具試圖。已標記爲deprecated
從邏輯上來看,源代碼被組織爲抽象基類,工具類(Mixin),常規(具體)實現和基於模型的實現。