Django 创建类视图

Django 创建类视图

什么是Django

Django是一种使用Python编写的知名Web框架,使开发人员能够更快地创建Web应用程序。Django应用程序中的视图负责处理HTTP请求并返回HTTP响应。类视图(也称为CBVs)是函数视图(也称为FBVs)的替代方案。它们提供了一种更面向对象的设计视图的方法。

在Django框架中,继承自Django内置视图类的Python类被称为CBVs。这些类提供了与各种HTTP方法(GET,POST,PUT,DELETE等)对应的方法,并允许您描述视图在每个HTTP方法中的操作方式。例如,GET对应GET方法,POST对应PUT方法,依此类推。

由于您可以在父类中定义可重用的行为并从这些类继承到视图中,使用CBVs的主要优势之一是它们以更有组织的方式组织您的代码。这是使用CBVs的最重要的优势之一。由于您能够修改内置视图方法的默认状态下的行为,因此您还可以为视图设计更复杂的逻辑。

总的来说,CBVs提供了一种更面向对象的构建Django视图的方法。这使您能够以更有组织的方式组织代码,并为您的视图指定更复杂的逻辑。它们是使用Django框架构建可靠Web应用程序的有效工具。

先决条件

本教程假设您已经对Django和Python有基本的了解。您应该已经在计算机上安装了Django,并且准备好创建并组织项目。

步骤和过程

步骤1:使用函数视图创建视图

在我们深入理解CBVs之前,让我们先使用函数视图(FBVs)创建一个视图。视图是处理HTTP请求并返回HTTP响应的函数。使用函数视图是在Django中创建视图的简单方式。

from django.shortcuts import render

def index(request):
   context = {}
   return render(request, 'index.html', context)

在上面的代码中,我们创建了一个名为index的视图。这个视图接受一个请求对象,并通过渲染一个名为index.html的HTML模板来返回一个HTTP响应。

步骤2:使用基于类的视图创建视图

我们刚刚创建的index视图的基于类的等价视图如下所示−

语法

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类(请求)的一个函数。另外,我不确定您如何在事后将其包含到另一个角度中。

什么是基于类的视图的意思

一个既可以扮演视图功能又可以执行其他任务的类被称为基于类的视图。因为它是一个类,可以使用不同的参数生成类的新实例以修改视图的行为。可以通过多种方式实现这一点。这种类型的视图有几个名称:通用视图、可重用视图和可插拔视图。

视图函数在Django中的用途是什么

称为视图函数或视图的Python函数是接收Web请求并提供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 创建类视图

结论

我们已经在本文中介绍了在Django中生成CBV所需的步骤。我们研究了Django中已经包含的一些CBV,比如TemplateView和FormView。CBV可以使常规任务变得更加容易,并提供大量可重用的代码。如果您在您正在开发的Django项目中使用CBV,您可以减少开发所需的时间,并使您的代码更模块化和更易于维护。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程