基於類的檢視建立 Django 檢視
什麼是 Django?
Django 是一個用 Python 編寫的知名 Web 框架,它使開發人員能夠更快地建立 Web 應用程式。Django 應用程式中的檢視負責處理 HTTP 請求併發送回 HTTP 響應。基於類的檢視 (CBV) 是基於函式的檢視 (FBV) 的替代方案。它們提供了一種更面向物件的方法來設計檢視。
在 Django 框架中,CBV 指的是繼承自 Django 內建檢視類之一的 Python 類。這些類提供與各種 HTTP 方法(GET、POST、PUT、DELETE 等)相關的方法,並允許您描述您的檢視對於每種 HTTP 方法的行為方式。例如,get 對應 GET 方法,post 對應 POST 方法,依此類推。
CBV 的主要優點之一是它們提供了一種更結構化的組織程式碼的方式,因為您可以在父類中定義可重用的行為,並在您的檢視中繼承這些類。這使得您可以建立更復雜的檢視邏輯,因為您可以修改內建檢視方法的預設行為。
總的來說,CBV 提供了一種更面向物件的方法來構建 Django 中的檢視。這允許您以更結構化的方式組織程式碼,併為您的檢視指定更復雜的邏輯。它們是使用 Django 框架構建可靠 Web 應用程式的有效工具。
先決條件
本教程假設您已經對 Django 和 Python 都有基本的瞭解。您應該已經在計算機上安裝了 Django,並且已經組織好一個專案並準備開始。
步驟和流程
步驟 1:使用基於函式的檢視建立檢視
在我們深入研究 CBV 之前,讓我們首先使用基於函式的檢視 (FBV) 建立一個檢視。檢視是處理 HTTP 請求並返回 HTTP 響應的函式。FBV 是在 Django 中建立檢視的一種簡單方法。
from django.shortcuts import render def index(request): context = {} return render(request, 'index.html', context)
在上面的程式碼中,我們建立了一個名為 index 的檢視。此檢視獲取一個請求物件,並透過呈現名為 index.html 的 HTML 模板返回 HTTP 響應。
步驟 2:使用基於類的檢視建立檢視
我們剛剛建立的 index 檢視作為 CBV 的等效項如下所示:
語法
from django.views import View from django.shortcuts import render class IndexView(View): def get(self, request): context = {} return render(request, 'index.html', context)
如您所見,我們建立了一個名為 IndexView 的類,它繼承自 django.views.View 類。為了處理 HTTP 請求,我們定義了一個名為 get 的方法,該方法將請求物件作為引數。然後,我們定義我們將用於呈現模板的上下文字典並返回呈現的響應。
步驟 3:使用 Django 的 TemplateView
Django 附帶許多內建 CBV,可以簡化常見任務。其中一個檢視是 TemplateView。TemplateView 負責為我們呈現模板。
要在您的專案中使用 TemplateView,您需要從 django.views.generic 匯入它。這是一個使用 TemplateView 的示例:
語法
from django.views.generic import TemplateView class IndexView(TemplateView): template_name = 'index.html'
在上面的程式碼中,我們使用了 TemplateView 來建立我們的檢視。我們定義了 template_name 屬性來告訴 Django 使用哪個模板來呈現響應。您還可以透過覆蓋 get_context_data 方法來定義其他上下文資料。
步驟 4:使用 Django 的 FormView 處理表單
Django 還提供了一個 FormView CBV,可以簡化表單處理。FormView 處理顯示錶單、驗證使用者提交的資料以及處理這些資料的邏輯。
這是一個使用 FormView 的示例:
語法
from django.views.generic.edit import FormView from django.forms import ContactForm class ContactView(FormView): template_name = 'contact.html' form_class = ContactForm success_url = '/contact/' def form_valid(self, form): form.send_email() return super().form_valid(form)
start_timer 函式使用 time 模組的 strftime 函式更新當前時間標籤為當前時間。它還將計時器標籤設定為 25 分鐘(番茄工作法的時間間隔長度),並在啟用停止按鈕的同時停用啟動按鈕。stop_timer 函式將計時器標籤重置為空字串,並在啟用啟動按鈕的同時停用停止按鈕。
在此示例中,我們定義了一個名為 ContactView 的檢視,它繼承自 FormView 類。我們定義了 template_name 屬性來告訴 Django 使用哪個模板來顯示錶單。我們還定義了 form_class 屬性來告訴 Django 使用哪個表單。
當表單成功驗證時,將呼叫 form_valid 方法。在這裡,我們正在表單物件上呼叫 send_email 方法,以電子郵件的形式傳送表單資料。我們還定義了 success_url 屬性來告訴 Django 表單成功提交後將使用者重定向到哪裡。
Django 中有哪些不同型別的基於類的檢視?
Django 中可用的不同型別的基於類的檢視包括:ListView、DetailView、CreateView、UpdateView、DeleteView、FormView 和 TemplateView。
在 Django 中使用基於類的檢視有哪些優勢?
在 Django 中使用基於類的檢視有很多好處,包括:它允許程式碼重用;它簡化了建立複雜檢視的過程;並且它允許更高級別的檢視行為定製。
在 Django 中建立基於類的檢視的一些最佳實踐是什麼?
使用適合您正在建立的檢視型別的檢視類,使用 as_view() 方法建立檢視類的例項,並使用 Django 提供的內建方法來自定義檢視的行為。這些是在 Django 中建立基於類的檢視的一些最佳實踐。其他最佳實踐包括:為要建立的檢視型別使用合適的檢視類。
為什麼以及何時應該使用基於類的檢視與函式檢視?
如果您想在 Django 應用程式中構建完整的 CRUD 操作,基於類的檢視是一個很好的選擇。但是,如果您選擇使用基於函式的檢視,您也可以在花費稍多一點時間和精力的情況下做到同樣的事情。
如何在 Django 中連線兩個檢視?
使用作為包裝器檢視一部分的檢視,並將其作為檢視函式或類中的上下文包含在內。在任何其他情況下,您可以像這樣從上下文中構建檢視,但它需要您提供一個請求物件:as_view(add context=context) 是 InlineView 類的函式 (request) 我也不確定您如何在事後將其包含到另一個視角中。
基於類的檢視是什麼意思?
也充當檢視角色的類稱為基於類的檢視。因為它是一個類,所以可以建立類的不同例項,並使用不同的引數來修改檢視的行為。這可以透過多種方式完成。這種型別的檢視有幾個名稱:通用檢視、可重用檢視和可插入檢視。
Django 檢視函式的用途是什麼?
檢視函式(簡稱檢視)是一個 Python 函式,它接收一個 Web 請求並返回一個 Web 響應。這個響應可以是網頁的 HTML 內容、重定向、404 錯誤、XML 文件或影像。
基於類的檢視的示例是什麼?
這些是基於類的檢視,並提供一些常見的附加功能。例如,一種常見的檢視型別可以稱為模板檢視。這將指一個建立一些上下文然後將其傳遞給特定模板以顯示的檢視。TemplateView 是 Django 提供的特定於上述目的的通用基於類的檢視。
基於類和麵向物件有什麼區別?
在處理面向物件程式設計時,可以區分兩種型別的語言。基於類的語言圍繞類的概念,類基本上只是事物的描述性類別。在面向物件的程式語言中,類的概念被構造所取代,以促進唯一物件的建立。
我們可以在 Django 中建立多個檢視嗎?
確實,這不僅適用於 views.py,而且也適用於 models.py 和 tests.py。
在 Django 中使用基於類的檢視有什麼缺點?
事實上,在 Django 中使用基於類的檢視確實存在一些缺點。由於基於類的檢視的程式碼分佈在多個方法中,一個潛在的缺點是除錯此類檢視中的錯誤可能更困難。此外,與基於函式的檢視相比,基於類的檢視可能需要一開始就進行更多的設計和配置工作。
如何在 Django 檢視中從表單獲取值?
使用檢視的表單
在 Django 中,作為引數傳遞給您的檢視的請求物件有一個名為“method”的屬性,用於確定請求的型別。此外,所有透過 POST 傳送的資料都可以透過 request.POST 的字典檢視。該檢視將提供使用登入使用者的帳戶進行的登入表單提交的結果。
最終程式,程式碼
from django.shortcuts import render def index(request): context = {} return render(request, 'index.html', context) from django.views import View from django.shortcuts import render class IndexView(View): def get(self, request): context = {} return render(request, 'index.html', context) from django.views.generic import TemplateView class IndexView(TemplateView): template_name = 'index.html' from django.views.generic.edit import FormView from .forms import ContactForm class ContactView(FormView): template_name = 'contact.html' form_class = ContactForm success_url = '/contact/' def form_valid(self, form): form.send_email() return super().form_valid(form)
輸出

結論
在本文中,我們已經介紹了在 Django 中生成 CBV 的步驟。我們研究了 Django 中已經包含的幾個 CBV,例如 TemplateView 和 FormView。CBV 可以簡化常見任務,並提供大量可重用的程式碼。如果您在正在處理的 Django 專案中使用 CBV,則可以減少開發時間,並使您的程式碼更模組化且更易於維護。