创建基于类的视图Django的视图类

创建基于类的视图Django的视图类

什么是Django?

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

在Django框架中,从Django内置视图类之一继承的Python类被称为CBV。这些类提供与各种HTTP方法(GET、POST、PUT、DELETE等)相关联的方法,并使您能够描述每个HTTP方法的视图应该如何操作。例如,GET对应于GET方法,POST对应于PUT方法,等等。

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

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

先决条件

本教程将假定您已经具备有关Django和Python的基本了解。您应该已经在计算机上安装了Django并准备好开始进行项目。

步骤和过程

第1步:使用基于函数的视图创建视图

在我们深入研究CBV之前,让我们先使用基于函数的视图(FBVs)创建一个视图。视图是处理HTTP请求并返回HTTP响应的函数。在Django中,FBV是一种简单创建视图的方法。

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,您需要从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 import ListView
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.views.generic.base import TemplateView

class BookList(ListView):
   model = Book

class BookDetail(DetailView):
   model = Book

class BookCreate(CreateView):
   model = Book
   fields = ['title', 'author', 'description']

class BookUpdate(UpdateView):
   model = Book
   fields = ['title', 'author', 'description']

class BookDelete(DeleteView):
   model = Book
   success_url = '/books/'

class HomePage(TemplateView):
   template_name = 'home.html'

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(添加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发送的数据都可以通过请求的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可以使例行任务更容易,提供大量可重用的代码。如果您将CBV用于您正在工作的Django项目中,可以节省开发时间,使代码更加模块化和简单易维护。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Django 教程