Django是一个基于Python的Web框架, 可让你快速创建Web应用程序。它具有内置的管理界面, 使其易于使用。通常被称为电池包括框架因为它为每种功能提供了内置功能。基于类的通用视图是内置视图的高级集合, 用于实现选择性视图策略(如创建, 检索, 更新, 删除)。基于类的视图通过分离视图的GET, POST请求来简化使用。它们不能代替基于功能的视图, 但是与基于功能的视图相比具有某些区别和优点:
- 与特定的HTTP方法(GET, POST等)相关的代码组织可以通过单独的方法而不是条件分支来解决。
- 诸如mixin(多重继承)之类的面向对象技术可用于将代码分解为可重用组件。
本文围绕完全实现Django中基于类的视图(创建, 检索, 更新, 删除)。让我们讨论一下CRUD的实际含义,
创建视图
–在数据库的表中创建或添加新条目。
检索视图
–以列表形式读取, 检索, 搜索或查看现有条目(
列表显示
)或详细检索特定条目(
详细视图
)
更新视图
–更新或编辑数据库表中的现有条目
删除视图
–删除, 停用或删除数据库表中的现有条目
表格浏览
–将表单呈现为模板并处理用户输入的数据
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 makemigrations
Python 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请求方法, 而不是使用单个视图函数中的有条件分支代码。
因此, 在视图函数中用于处理HTTP GET的代码将如下所示:
from django.http import HttpResponse
def my_view(request):
if request.method = = 'GET' :
# <view logic>
return HttpResponse( 'result' )
在基于类的视图中, 这将变为:
from django.http import HttpResponse
from django.views import View
class 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 MyView
urlpatterns = [
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 GeeksModel
class GeeksCreate(CreateView):
# specify the model for create view
model = GeeksModel
# specify the fields to be displayed
fields = [ '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 = "Submit" >
</ form >
让我们检查一下
http://本地主机:8000 /
要检查基于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 GeeksModel
class 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 /
要检查基于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 DetailView
from .models import GeeksModel
class 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 /
要检查基于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 GeeksModel
class 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 = "Save" >
</ form >
让我们检查一下
http:// localhost:8000/1 / update /
要检查基于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 GeeksModel
class 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 = "Confirm" >
</ form >
让我们检查一下
http:// localhost:8000/1 /删除
.
要检查基于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 GeeksForm
class 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 = "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/
,
要检查基于Class的FormView的完整实现, 请访问
FormView –基于类的视图Django
注意怪胎!巩固你的基础Python编程基础课程和学习基础知识。
首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。