Django是一個基於Python的Web框架,它使您能夠快速建立Web應用程序,而不會遇到一般在其餘框架中會發現的全部安裝或依賴性問題。Django基於MVT(模型視圖模板)體系結構,並圍繞CRUD(建立,檢索,更新,刪除)操做展開。最好將CRUD解釋爲構建Django Web應用程序的一種方法。一般,CRUD意味着對數據庫中的表執行建立,檢索,更新和刪除操做。讓咱們討論一下CRUD的實際含義,html
建立 –在數據庫的表中建立或添加新條目。
檢索 –以列表的形式(列表視圖)讀取,檢索,搜索或查看現有條目,或詳細檢索特定的條目(詳細視圖)
更新 –更新或編輯數據庫表中的現有條目
刪除 –刪除,停用或刪除數據庫表中的現有條目正則表達式
使用示例說明如何建立和使用CRUD視圖。考慮一個名爲的項目,其中geeksforgeeks
有一個名爲的應用geeks
數據庫
在擁有一個項目和一個應用程序以後,讓咱們建立一個模型,咱們將經過咱們的視圖建立其模型。在
djangogeeks/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 –從模型建立表單,請參閱本文。
ideforms.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)
在中建立模板
fetchtemplates/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/
ui
檢索視圖基本上分爲兩種視圖:詳細視圖和列表視圖。this
列表視圖是指一種視圖(邏輯),用於以特定順序列出數據庫中表的全部或特定實例。它用於在單個頁面上顯示多種類型的數據或查看(例如,電子商務頁面上的產品)。
在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