Django是一个基于Python的Web框架,它使您可以快速创建Web应用程序,而不会遇到通常在其他框架中会发现的所有安装或依赖性问题。Django基于MVT(模型视图模板)体系结构,并围绕CRUD(创建,检索,更新,删除)操作展开。最好将CRUD解释为构建Django Web应用程序的一种方法。通常,CRUD意味着对数据库中的表执行创建,检索,更新和删除操作。让我们讨论一下CRUD的实际含义,
创建 –在数据库的表中创建或添加新条目。
检索 –以列表的形式(列表视图)读取,检索,搜索或查看现有条目,或详细检索特定的条目(详细视图)
更新 –更新或编辑数据库表中的现有条目
删除 –删除,停用或删除数据库表中的现有条目
Django CRUD(创建,检索,更新,删除)基于函数的视图
使用示例说明如何创建和使用CRUD视图。考虑一个名为的项目,其中geeksforgeeks
有一个名为的应用geeks
在拥有一个项目和一个应用程序之后,让我们创建一个模型,我们将通过我们的视图创建其模型。在
geeks/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 –从模型创建表单,请参阅本文。
forms.py
在geeks文件夹中创建一个文件,
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",
]
建立检视
创建视图是指在数据库中创建表实例的视图(逻辑)。就像从用户那里获取输入并将其存储在指定表中一样。
在geeks/views.py
,
from django.shortcuts import render
# relative import of forms
from .models import GeeksModel
from .forms import GeeksForm
def create_view(request):
# dictionary for initial data with
# field names as keys
context ={}
# add the dictionary during initialization
form = GeeksForm(request.POST or None)
if form.is_valid():
form.save()
context['form']= form
return render(request, "create_view.html", context)
在中创建模板
templates/create_view.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:// localhost:8000/
检索视图
检索视图基本上分为两种视图:详细视图和列表视图。
列表显示
列表视图是指一种视图(逻辑),用于以特定顺序列出数据库中表的所有或特定实例。它用于在单个页面上显示多种类型的数据或查看(例如,电子商务页面上的产品)。
在geeks / views.py中,
from django.shortcuts import render
# relative import of forms
from .models import GeeksModel
def list_view(request):
# dictionary for initial data with
# field names as keys
context ={}
# add the dictionary during initialization
context["dataset"] = GeeksModel.objects.all()
return render(request, "list_view.html", context)
在中创建模板
templates/list_view.html
,
<div class="main">
{% for data in dataset %}.
{{ data.title }}<br/>
{{ data.description }}<br/>
<hr/>
{% endfor %}
</div>
现在访问http:// localhost:8000/
详细视图
详细信息视图是一种视图(逻辑),用于显示数据库中具有所有必要详细信息的表的特定实例。它用于在单个页面或视图上显示多种类型的数据,例如用户的个人资料。
在geeks/views.py
,
from django.urls import path
# importing views from views..py
from .views import detail_view
urlpatterns = [
path('<id>', detail_view ),
]
让我们为其创建一个视图和模板。在
geeks/views.py
,
from django.shortcuts import render
# relative import of forms
from .models import GeeksModel
# pass id attribute from urls
def detail_view(request, id):
# dictionary for initial data with
# field names as keys
context ={}
# add the dictionary during initialization
context["data"] = GeeksModel.objects.get(id = id)
return render(request, "detail_view.html", context)
在中创建模板
templates/Detail_view.html
,
<div class="main">
<!-- Specify fields to be displayed -->
{{ data.title }}<br/>
{{ data.description }}<br/>
</div>
让我们检查一下http:// localhost:8000/1上的内容。
更新视图
更新视图是一种视图(逻辑),用于使用一些其他详细信息从数据库更新表的特定实例。它用于更新数据库中的小肠,例如,更新geeksforgeeks上的文章。
在geeks/views.py
,
from django.shortcuts import (get_object_or_404,
render,
HttpResponseRedirect)
# relative import of forms
from .models import GeeksModel
from .forms import GeeksForm
# after updating it will redirect to detail_View
def detail_view(request, id):
# dictionary for initial data with
# field names as keys
context ={}
# add the dictionary during initialization
context["data"] = GeeksModel.objects.get(id = id)
return render(request, "detail_view.html", context)
# update view for details
def update_view(request, id):
# dictionary for initial data with
# field names as keys
context ={}
# fetch the object related to passed id
obj = get_object_or_404(GeeksModel, id = id)
# pass the object as instance in form
form = GeeksForm(request.POST or None, instance = obj)
# save the data from the form and
# redirect to detail_view
if form.is_valid():
form.save()
return HttpResponseRedirect("/"+id)
# add form dictionary to context
context["form"] = form
return render(request, "update_view.html", context)
现在,在创建以下模板
templates
文件夹,
在geeks/templates/update_view.html
,
<div class="main">
<!-- Create a Form -->
<form method="POST">
<!-- Security token by Django -->
{% csrf_token %}
<!-- form as paragraph -->
{{ form.as_p }}
<input type="submit" value="Update">
</form>
</div>
在
geeks/templates/detail_view.html
,
<div class="main">
<!-- Display attributes of instance -->
{{ data.title }} <br/>
{{ data.description }}
</div>
让我们检查是否一切正常,请访问http:// localhost:8000/1/update。
删除检视
删除视图是指从数据库中删除表的特定实例的视图(逻辑)。它用于删除数据库中的条目,例如,删除geeksforgeeks上的文章。
在geeks / views.py中
from django.shortcuts import (get_object_or_404,
render,
HttpResponseRedirect)
from .models import GeeksModel
# delete view for details
def delete_view(request, id):
# dictionary for initial data with
# field names as keys
context ={}
# fetch the object related to passed id
obj = get_object_or_404(GeeksModel, id = id)
if request.method =="POST":
# delete object
obj.delete()
# after deleting redirect to
# home page
return HttpResponseRedirect("/")
return render(request, "delete_view.html", context)
现在,一个URL映射到该视图与正则表达式
id
,
在geeks/urls.py
from django.urls import path
# importing views from views..py
from .views import delete_view
urlpatterns = [
path('<id>/delete', delete_view ),
]
用于删除视图的模板包括一个简单的表单,用于确认用户是否要删除实例。在
geeks/templates/delete_view.html
,
<div class="main">
<!-- Create a Form -->
<form method="POST">
<!-- Security token by Django -->
{% csrf_token %}
Are you want to delete this item ?
<input type="submit" value="Yes" />
<a href="/">Cancel </a>
</form>
</div>
一切就绪,现在让我们检查其是否正常运行,请访问
http:// localhost:8000/2/delete