基于类的通用视图Django(创建,检索,更新,删除)

  • 列表显示
  • 详细视图
目录Django是一个基于Python的Web框架, 可让你快速创建Web应用程序。它具有内置的管理界面, 使其易于使用。通常被称为电池包括框架因为它为每种功能提供了内置功能。基于类的通用视图是内置视图的高级集合, 用于实现选择性视图策略(如创建, 检索, 更新, 删除)。基于类的视图通过分离视图的GET, POST请求来简化使用。它们不能代替基于功能的视图, 但是与基于功能的视图相比具有某些区别和优点:
  • 与特定的HTTP方法(GET, POST等)相关的代码组织可以通过单独的方法而不是条件分支来解决。
  • 诸如mixin(多重继承)之类的面向对象技术可用于将代码分解为可重用组件。
本文围绕完全实现Django中基于类的视图(创建, 检索, 更新, 删除)。让我们讨论一下CRUD的实际含义,
基于类的通用视图Django(创建,检索,更新,删除)

文章图片
创建视图
–在数据库的表中创建或添加新条目。
检索视图
–以列表形式读取, 检索, 搜索或查看现有条目(
列表显示
)或详细检索特定条目(
详细视图
)
更新视图
–更新或编辑数据库表中的现有条目
删除视图
–删除, 停用或删除数据库表中的现有条目
表格浏览
–将表单呈现为模板并处理用户输入的数据
Django CRUD(创建, 检索, 更新, 删除)基于类的视图 的插图如何创建和使用CRUD视图用一个例子。考虑一个名为极客有一个名为极客.
请参阅以下文章, 以检查如何在Django中创建项目和应用。如何在Django中使用MVT创建基本项目?如何在Django中创建应用程序?
在拥有一个项目和一个应用程序之后, 让我们创建一个模型, 我们将通过我们的视图创建该模型。在怪胎/models.py,
# import the standard Django Model # from built-in library from django.db import models# declare a new model with a name "GeeksModel" class GeeksModel(models.Model):# fields of the model title = models.CharField(max_length = 200 ) description = models.TextField()# renames the instances of the model # with their title name def __str__( self ): return self .title

创建此模型后, 我们需要运行两个命令以便为同一数据库创建数据库。
Python manage.py makemigrationsPython manage.py migrate

现在, 我们将为此模型创建一个Django ModelForm。请参阅本文以获取更多有关modelform的信息–Django ModelForm –从模型创建表单。创建一个文件表格在极客文件夹中,
from django import forms from .models import GeeksModel# creating a form class GeeksForm(forms.ModelForm):# create meta class class Meta: # specify model to be used model = GeeksModel# specify fields to be used fields = [ "title" , "description" , ]

使用基于类的视图
从本质上讲, 基于类的视图使你可以使用不同的类实例方法来响应不同的HTTP请求方法, 而不是使用单个视图函数中的有条件分支代码。
【基于类的通用视图Django(创建,检索,更新,删除)】因此, 在视图函数中用于处理HTTP GET的代码将如下所示:
from django.http import HttpResponsedef my_view(request): if request.method = = 'GET' : # < view logic> return HttpResponse( 'result' )

在基于类的视图中, 这将变为:
from django.http import HttpResponse from django.views import Viewclass MyView(View): def get( self , request): # < view logic> return HttpResponse( 'result' )

同样在urls.py, 一个需要使用as_view()从基于函数的视图区分基于类的视图的方法。
# urls.py from django.urls import path from myapp.views import MyViewurlpatterns = [path( 'about/' , MyView.as_view()), ]

创建视图
创建视图是指在数据库中创建表实例的视图(逻辑)。我们已经在"创建视图-基于函数的视图Django"中讨论了创建视图的基础。基于类的视图会自动设置从A到Z的所有内容。只需指定要为其创建创建视图的模型和字段。然后基于Class的CreateView将自动尝试在其中查找模板app_name / modelname_form.html。在我们的情况下是geeks / templates / geeks / geeksmodel_form.html。让我们创建基于类的视图。在geeks / views.py,
from django.views.generic.edit import CreateView from .models import GeeksModelclass GeeksCreate(CreateView):# specify the model for create view model = GeeksModel# specify the fields to be displayedfields = [ 'title' , 'description' ]

现在创建一个URL路径以映射视图。在geeks / urls.py中,
from django.urls import path# importing views from views..py from .views import GeeksCreate urlpatterns = [ path('', GeeksCreate.as_view() ), ]

在中创建模板template / geeks / geeksmodel_form.html,
< form method = "POST" enctype = "multipart/form-data" > < !-- Security token --> {% csrf_token %}< !-- Using the formset --> {{ form.as_p }}< input type = "submit" value = "https://www.lsbin.com/Submit" > < / form >

让我们检查一下
http://本地主机:8000 /
基于类的通用视图Django(创建,检索,更新,删除)

文章图片
要检查基于Class的CreateView的完整实现, 请访问
Createview –基于类的视图Django
.
检索视图
列表显示 列表视图是指用于显示数据库中表的多个实例的视图(逻辑)。我们已经在中讨论了列表视图的基础列表视图–基于函数的视图Django。基于类的视图会自动设置从A到Z的所有内容。只需指定要为其创建ListView的模型, 然后基于类的ListView将自动尝试在其中找到模板app_name / modelname_list.html。在我们的情况下是geeks / templates / geeks / geeksmodel_list.html。让我们创建基于类的视图。在geeks / views.py,
from django.views.generic. list import ListView from .models import GeeksModelclass GeeksList(ListView):# specify the model for list view model = GeeksModel

现在创建一个URL路径以映射视图。在geeks / urls.py中,
from django.urls import path# importing views from views..py from .views import GeeksList urlpatterns = [ path('', GeeksList.as_view()), ]

在中创建模板templates / geeks / geeksmodel_list.html,
< ul > < !-- Iterate over object_list --> {% for object in object_list %} < !-- Display Objects --> < li > {{ object.title }}< / li > < li > {{ object.description }}< / li > < hr /> < !-- If objet_list is empty--> {% empty %} < li > No objects yet.< / li > {% endfor %} < / ul >

让我们检查一下
http://本地主机:8000 /
基于类的通用视图Django(创建,检索,更新,删除)

文章图片
要检查基于Class的ListView的完整实现, 请访问
ListView –基于类的视图Django
详细视图 详细视图是指一种视图(逻辑), 用于显示数据库中表的一个实例。我们已经在中讨论了细节视图的基础细节视图–基于函数的视图Django。基于类的视图会自动设置从A到Z的所有内容。只需指定要为其创建DetailView的模型, 然后基于类的DetailView将自动尝试在其中查找模板。app_name / modelname_detail.html。在我们的情况下是geeks / templates / geeks / geeksmodel_detail.html。让我们创建基于类的视图。在geeks / views.py,
from django.views.generic.detail import DetailViewfrom .models import GeeksModelclass GeeksDetailView(DetailView): # specify the model to use model = GeeksModel

现在创建一个URL路径以映射视图。在geeks / urls.py中,
from django.urls import path# importing views from views..py from .views import GeeksDetailView urlpatterns = [ # < pk> is identification for id field, # slug can also be used path( '< pk> /' , GeeksDetailView.as_view()), ]

在中创建模板templates / geeks / geeksmodel_detail.html,
< h1 > {{ object.title }}< / h1 > < p > {{ object.description }}< / p >

让我们检查一下
http://本地主机:8000/1 /
基于类的通用视图Django(创建,检索,更新,删除)

文章图片
要检查基于Class的DetailView的完整实现, 请访问
DetailView –基于类的视图Django
更新视图
UpdateView引用一个视图(逻辑)以使用一些额外的细节来更新数据库中表的特定实例。它用于更新数据库中的小肠, 例如, 更新lsbin上的文章。我们已经在中讨论了更新视图的基础更新视图–基于函数的视图Django。基于类的视图会自动设置从A到Z的所有内容。只需要指定要为其创建UpdateView的模型, 然后基于类的UpdateView就会自动尝试在其中找到模板app_name / modelname_form.html。在我们的情况下是geeks / templates / geeks / geeksmodel_form.html。让我们创建基于类的视图。在geeks / views.py,
# import generic UpdateView from django.views.generic.edit import UpdateView# Relative import of GeeksModel from .models import GeeksModelclass GeeksUpdateView(UpdateView): # specify the model you want to use model = GeeksModel# specify the fields fields = [ "title" , "description" ]# can specify success url # url to redirect after successfully # updating details success_url = "/"

现在创建一个URL路径以映射视图。在geeks / urls.py中,
from django.urls import path# importing views from views..py from .views import GeeksUpdateView urlpatterns = [ # < pk> is identification for id field, # < slug> can also be used path( '< pk> /update' , GeeksUpdateView.as_view()), ]

在中创建模板template / geeks / geeksmodel_form.html,
< form method = "post" > {% csrf_token %} {{ form.as_p }} < input type = "submit" value = "https://www.lsbin.com/Save" > < / form >

让我们检查一下
http:// localhost:8000/1 / update /
基于类的通用视图Django(创建,检索,更新,删除)

文章图片
要检查基于Class的UpdateView的完整实现, 请访问UpdateView –基于类的视图Django.
删除视图
删除视图是指从数据库中删除表的特定实例的视图(逻辑)。它用于删除数据库中的小肠, 例如, 删除lsbin上的文章。我们已经在中讨论了删除视图的基础删除视图–基于函数的视图Django。基于类的视图会自动设置从A到Z的所有内容。只需指定要为其创建DeleteView的模型, 然后基于类的DeleteViewde就会自动尝试在其中找到模板app_name / modelname_confirm_delete.html。在我们的情况下是geeks / templates / geeks / geeksmodel_confirm_delete.html。让我们创建基于类的视图。在geeks / views.py,
# import generic UpdateView from django.views.generic.edit import DeleteView# Relative import of GeeksModel from .models import GeeksModelclass GeeksDeleteView(DeleteView): # specify the model you want to use model = GeeksModel# can specify success url # url to redirect after successfully # deleting object success_url = "/"

现在创建一个URL路径以映射视图。在geeks / urls.py中,
from django.urls import path# importing views from views..py from .views import GeeksDeleteView urlpatterns = [ # < pk> is identification for id field, # slug can also be used path( '< pk> /delete/' , GeeksDeleteView.as_view()), ]

在中创建模板template / geeks / geeksmodel_confirm_delete.html,
< form method = "post" > {% csrf_token %} < p > Are you sure you want to delete "{{ object }}"?< / p > < input type = "submit" value = "https://www.lsbin.com/Confirm" > < / form >

让我们检查一下
http:// localhost:8000/1 /删除
基于类的通用视图Django(创建,检索,更新,删除)

文章图片
.
要检查基于Class的DeleteView的完整实现, 请访问
DeleteView –基于类的视图Django
表格浏览
FormView是指用于显示和验证Django表单的视图(逻辑)。例如, 用于在lsbin注册用户的表单。基于类的视图会自动设置从A到Z的所有内容。只需要指定为其创建FormView和template_name的表单, 然后基于类的FormView将自动呈现该表单。让我们创建基于类的视图。在geeks / views.py,
# import generic FormView from django.views.generic.edit import FormView# Relative import of GeeksForm from .forms import GeeksFormclass GeeksFormView(FormView): # specify the Form you want to use form_class = GeeksForm# sepcify name of template template_name = "geeks / geeksmodel_form.html"# can specify success url # url to redirect after successfully # updating details success_url = "/thanks/"

在中为此视图创建模板geeks / geeksmodel_form.html,
< form method = "post" > {% csrf_token %} {{ form.as_p }} < input type = "submit" value = "https://www.lsbin.com/Save" > < / form >

将网址映射到怪胎/ urls.py,
from django.urls import path# importing views from views..py from .views import GeeksFormView urlpatterns = [ path('', GeeksFormView.as_view()), ]

现在访问
http://127.0.0.1:8000/
,
基于类的通用视图Django(创建,检索,更新,删除)

文章图片
要检查基于Class的FormView的完整实现, 请访问
FormView –基于类的视图Django
注意怪胎!巩固你的基础Python编程基础课程和学习基础知识。
首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。

    推荐阅读