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+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告