Django 基於類的視圖源碼分析 一

基於類的視圖(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),常規(具體)實現和基於模型的實現。

相關文章
相關標籤/搜索