Django 中基於類的檢視與基於函式的檢視


Django 是一個流行的 Web 框架,用於使用 Python 構建複雜且可擴充套件的 Web 應用程式。Django 的關鍵設計原則之一是使用檢視來處理 HTTP 請求並生成響應。

在 Django 中,檢視可以使用基於類的檢視或基於函式的檢視來實現。這兩種型別的檢視都提供了自己的一套優點和缺點,為應用程式選擇合適的檢視型別取決於您的具體需求和開發風格。

  • 基於函式的檢視是 Django 中實現檢視的傳統方式。這些檢視實現為簡單的 Python 函式,這些函式將 HTTP 請求作為引數並返回 HTTP 響應。

  • 另一方面,基於類的檢視為在 Django 中實現檢視提供了更強大且靈活的方法。這些檢視實現為從 Django 的內建檢視類繼承的類,並提供各種功能,例如 mixin、繼承和基於方法的排程。

在本教程中,我們將探討 Django 中基於類的檢視和基於函式的檢視之間的區別,並討論它們各自的優缺點。

Django 中的基於類的檢視

基於類的檢視 (CBV) 是在 Django 中實現檢視的一種強大且靈活的方式。它們實現為從 Django 的內建 View 類繼承的 Python 類,並提供廣泛的功能和靈活性。

與基於函式的檢視相比,使用 CBV 的主要優點是:

  • 程式碼可重用性 − CBV 旨在可重用,並且可以透過子類化輕鬆擴充套件和修改。

  • 模組化 − CBV 本質上是模組化的,並提供了一種簡單的方法將複雜的檢視分解成更小、可重用的元件。

  • 一致性 − CBV 為處理不同型別的 HTTP 請求提供一致的介面。

示例 1

現在,讓我們看一下 Django 中基於類的檢視的一個簡單示例。

在此示例中,我們定義了一個名為 HelloView 的新類,該類繼承自 Django 的 View 類。View 類提供了用於處理 HTTP 請求和生成響應的基本介面,我們可以實現自己的方法來處理特定的 HTTP 方法。

from django.views import View
from django.http import HttpResponse

class HelloView(View):
   def get(self, request):
      return HttpResponse("Hello, World!")

在這種情況下,我們定義了一個 get() 方法來處理 HTTP GET 請求。當用戶對此檢視發出 GET 請求時,將呼叫 get() 方法,它將返回一個簡單地說“Hello, World!”的 HTTP 響應。

要在 Django 應用程式中使用此檢視,我們需要將其對映到 URL。我們可以透過在我們的 urls.py 檔案中定義一個新的 URL 模式來做到這一點,如下所示:

from django.urls import path
from .views import HelloView

urlpatterns = [
   path('hello/', HelloView.as_view(), name='hello'),
]

現在,當用戶訪問我們應用程式中的 /hello/ URL 時,他們將看到我們的 HelloView 返回的“Hello, World!”訊息。

以下是訪問 URL 時檢視的示例輸出:

輸出

Hello, World!

Django 中的基於函式的檢視

基於函式的檢視 (FBV) 是 Django 中實現檢視的傳統方式。它們實現為簡單的 Python 函式,這些函式將 HTTP 請求作為引數並返回 HTTP 響應。

使用 FBV 的主要優點是:

  • 簡單性 − FBV 簡單易懂,使其成為小型專案或簡單檢視的良好選擇。

  • 熟悉度 − FBV 使用許多開發人員已經熟悉的函式式語法。

  • 靈活性 − FBV 提供了很大的靈活性,並允許開發人員使用任何 Python 函式作為檢視,包括第三方庫和自定義函式。

示例 2

現在,讓我們看一下 Django 中基於函式的檢視的一個簡單示例。

在此示例中,我們定義了一個名為 hello 的新函式,該函式將 HTTP 請求作為引數並返回一個說“Hello, World!”的 HTTP 響應。

from django.http import HttpResponse

def hello(request):
   return HttpResponse("Hello, World!")

要在 Django 應用程式中使用此檢視,我們需要將其對映到 URL。我們可以透過在我們的urls.py 檔案中定義一個新的 URL 模式來做到這一點,如下所示:

from django.urls import path
from .views import hello

urlpatterns = [
   path('hello/', hello, name='hello'),
]

在此示例中,我們定義了一個新的 URL 模式,該模式對映到 hello 函式。

現在,當用戶訪問我們應用程式中的 /hello/ URL 時,他們將看到我們的 hello 函式返回的“Hello, World!”訊息。

以下是訪問 URL 時檢視的示例輸出:

輸出

Hello, World!

結論

總之,基於類和基於函式的方法都是 Django 中實現檢視的有效方法。這兩種方法之間的選擇最終取決於專案的具體要求以及開發人員的個人喜好。

更新於: 2023-09-01

1K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告