Django 基于类的通用视图2025年03月17日 | 阅读 9 分钟 Django 是 Python 最流行的 Web 框架,用于快速 Web 应用程序开发。它提供了一个内置的界面,使您可以轻松地使用它。它也被称为“电池”包含框架,因为它为每个操作都提供了内置的设施。 我们大多数人可能已经熟悉基于函数的视图,并且知道如何使用基于函数的视图来处理请求。如果您不熟悉它们,请访问我们的 Django 教程。 在本教程中,我们将介绍基于类的通用视图。这些是高级的内置视图集,用于实现选择性 CRUD(创建、检索、更新和删除)操作。使用基于类的视图,我们可以轻松处理视图的 GET、POST 请求。 它们不能替代基于函数的视图,但提供了基于函数的视图的一些额外设施。 让我们简要概述一下基于函数的视图和基于类的视图。 基于函数的视图基于函数的视图对初学者友好;初学者可以轻松理解它们。与基于类的视图相比,它很容易理解。
但是基于函数的视图无法扩展,并且还会导致代码冗余。 基于类的视图基于类的视图可以代替基于函数的视图使用。所有操作都使用 Python 对象而不是函数来处理。它们提供了优于基于函数的视图的一些优秀示例。基于类的视图可以以简单的方式实现 CRUD 操作。
但是,这些比较复杂,难以理解和阅读。它具有隐式的代码流程。 使用基于类的视图执行 CRUD(创建、检索、更新、删除)我们将演示如何使用基于类的视图创建基本的 CRUD 应用程序。 我们将创建项目名称 Hello,其中包括一个名为 sampleapp 的应用程序。如果您不知道如何在 django 中创建应用程序,请访问 Django App 教程。 在应用程序中,我们将在 model.py 文件中创建一个 Employee 模型。 示例 - 然后我们运行以下命令。 现在,我们将在 form.py 文件中为此模型创建 Django ModelForm。它将用于将表单显示到模板。 forms.py 实现基于类的视图基于函数的视图使用不同的类实例方法返回不同的 HTTP 请求方法。因此,基于函数的方法将如下所示。 如果我们实现基于类的视图,它将如下所示。 要处理基于类的视图,我们需要在 urls.py 文件中使用 as_view()。 CreateView(创建视图)CreateView 实现视图以在数据库中创建表的实例。此视图会自动完成创建实例的所有操作。我们只需要指定要创建视图及其字段的模型名称。基于类的创建视图将搜索 employee_form.html。让我们看看创建视图的以下示例。 注意 - employee_form.html 文件应包含在 template/app_name/employee_form.html 中。在我们的例子中,文件位置是 template/sampleapp/employee_form.html。View.py urls.py 现在我们在本地主机上运行服务器。 输出 ![]() 在这里,我们得到了一个表单,可以在其中创建一个员工。让我们看看创建员工的演示。 ![]() 正如我们可以在管理面板中看到的那样,员工已在数据库中创建。 ![]() Retrieve View(检索视图)有两种检索视图 - ListView 和 DetailView。 我们将使用 ListView,它指的是用于在数据库中显示表多个实例的视图。我们只需要指定应用 ListView 的模型名称,基于类的 ListView 将自动为我们完成这项工作。要检索数据,我们需要创建 app_name/modelname_list.html 文件。 views.py url.py sampleapp/template/employee_list.html 现在,我们运行 localhost 服务器并将请求发送以获取数据。 ![]() DetailView(详细视图)DetailView 与 ListView 不同,因为它显示了数据库中表的一个实例。 Django 自动为每个条目分配一个主键,并且我们需要在请求中指定 <pk>。 DetailView 将自动执行所有操作。 DetailView 的实现与 ListView 相同,我们需要创建 modelname_detail.html. 让我们了解 DetailView 的以下实现。 View.py url.py sampleapp/template/employee_detail.html 我们创建了一个新员工,并将其分配为 2 作为主键。 运行服务器并提供带有主键的请求。 输出 ![]() UpdateView(更新视图)UpdateView 允许从数据库更新表中特定实例的更多详细信息。此视图用于更改数据库中的条目。例如,我们想更改用户的姓氏。我们需要指定模型名称,它将自动完成所有操作。让我们看看 UpdateView 的以下实现。 我们已经在模板中创建了 employee_form.html 文件。 在我们的例子中,它是 D:\python_project\Myfirstdjangoproject\hello\template\employee_form.html> View.py url.py 输出 ![]() 我们已经更新了对象的姓氏。 更新后的值将自动添加到数据库中。 ![]() DeleteView(删除视图)DeleteView 允许从数据库中删除表的实例。 它用于删除数据库中的条目。 我们只需要指定模型名称,它就会自动完成所有操作。 让我们看看 UpdateView 的以下实现。 view.py 现在,我们创建 URL 路径来映射视图。 url.py 现在,我们创建 template/sampleapp/employee_confirm_delete.html. 输出 ![]() 当我们单击确认按钮时,该对象将被删除并重定向到主页。 我们已经使用类创建了 CRUD 操作 代码以下是基于类的通用视图的完整代码。 View.py Hello/urls.py sampleapp/url.py template/base.html template/sampleapp/employe_list template/sampleapp/employe_detail template/sampleapp/employe_update_form.html template/sampleapp/employe_confirm_delete.html 结论在本教程中,我们讨论了基于类的视图以及它们与基于函数的视图有何不同。我们使用内置视图实现了 CRUD 操作。 CBV 是一种从现有视图继承并覆盖属性 (template_name) 或方法的功能强大的方法。 这些视图具有预先编写的代码,因此我们不需要进行硬编码。但是,不建议初学者使用它,因为它无助于理解 Django 的核心深度。一旦您熟悉了基于函数的视图的概念。您可以转移到基于类的视图。 |
我们请求您订阅我们的新闻通讯以获取最新更新。