Django基於類的視圖

django 1.8 官方文檔翻譯: 3-4-1 基於類的視圖
https://segmentfault.com/a/1190000003506222


基於類的視圖

視圖是一個可調用對象,它接受一個請求而後返回一個響應。 python

基於類的視圖優勢

  1. HTTP方法(GET、POST等)可有有個字的方法,而不是經過條件分支來解決。
  2. 面嚮對象的技術,例如Mixin(多繼承)能夠將代碼分解成可重用的組件。

使用基於類的視圖

使用基於類的視圖的核心是容許你使用不一樣實例方法來形影不一樣的HTTP請求方法,而不是在一個視圖函數中使用條件分支代碼來實現。 django

由於Django的URL解析器將請求和關聯的參數發送給一個可刁穎的函數兒不是一個雷,因此基於類的視圖有一個as_view()類方法類做爲類的可調用入口。改as_view()入口點建立類的一個實例並調用dispatch()方法。diapatch查看請求是GET仍是POST等等,並將請求轉發給相應的方法,若是發方法沒有定義則引起HttpResponseNotAllowed。 segmentfault

設置了類的屬性: 函數

  1. Python標準的方式,子類化並在子類中覆蓋屬性和方法。
  2. 在URLconf中用as_view()調用的關鍵字參數配置類的屬性。
    urlpatterns = [
        url(r'^about/', GreetingView.as_view(greeting="G'day")),
    ]



       對於每一個請求都會實例化類的一個實例,可是as_view()入口點設置的類屬性值在URl第一次導入時配置。 url

使用Mixin

  1. Mixin 是重用多個類的代碼的一種極好的方法,可是它們須要一些代價。代碼在Mixin 中越分散,子類將越難閱讀並知道它的行爲;若是你的繼承很深,將難以知道應該覆蓋哪個Mixin 的方法。
  2. 只能繼承一個通用視圖——也就是說,只能有一個弗雷繼承View,其餘的弗雷必須是Mixin。繼承多個繼承自View類將不能像預期的那樣動做。

封裝as_view()的Mixin

將共同的行爲運用於多個類的一種方法是編寫一個封裝as_view()的方法Mixin。 spa

相關文章
相關標籤/搜索