Django View(檢視系統)
Django View
一個檢視函式(類),簡稱檢視,是一個簡單的 Python 函式(類),它接受Web請求並且返回Web響應。響應可以是一張網頁的HTML內容,一個重定向,一個404錯誤,一個XML文件,或者一張圖片。
無論檢視本身包含什麼邏輯,都要返回響應。程式碼寫在哪裡也無所謂,只要它在你當前專案目錄下面。為了將程式碼放在某處,大家約定成俗將檢視放置在專案(project)或應用程式(app)目錄中的名為 views.py 的檔案中。
一、FBV和CBV
1.1 FBV
FBV(function base views)
1.2 CBV
CBV(class base views) 就是在視圖裡使用類處理請求。
Python是一個面向物件的程式語言,如果只用函式來開發,有很多面向物件的優點就錯失了(繼承、封裝、多型)。所以 Django 在後來加入了Class-Based-View。可以讓我們用類寫View。這樣做的優點主要下面兩種:
- 提高了程式碼的複用性,可以使用面嚮物件的技術,比如 Mixin(多繼承)
- 可以用不同的函式針對不同的HTTP方法處理,而不是通過很多 if 判斷,提高程式碼可讀性
Django的 url 是將一個請求分配給可呼叫的函式的,而不是一個 class 。針對這個問題,class-based view 提供了一個 as_view() 靜態方法(也就是類方法),呼叫這個方法,會建立一個類的例項,然後通過例項呼叫 dispatch() 方法,dispatch() 方法會根據 request 的 method 的不同調用相應的方法來處理 request(如 get() 、post() 等)。到這裡,這些方法和 function-based view差不多了,要接收request,得到一個 response 返回。如果方法沒有定義,會丟擲 HttpResponseNotAllowed 異常。
注意:使用CBV時,urls.py 中也做對應的修改:
# urls.py中 url(r'^add_class/$', views.AddClass.as_view()),
1