Django 教程 --- Django CRUD

Django是一個基於Python的Web框架,它使您能夠快速建立Web應用程序,而不會遇到一般在其餘框架中會發現的全部安裝或依賴性問題。Django基於MVT(模型視圖模板)體系結構,並圍繞CRUD(建立,檢索,更新,刪除)操做展開。最好將CRUD解釋爲構建Django Web應用程序的一種方法。一般,CRUD意味着對數據庫中的表執行建立,檢索,更新和刪除操做。讓咱們討論一下CRUD的實際含義,html


圖片

建立 –在數據庫的表中建立或添加新條目。
檢索 –以列表的形式(列表視圖)讀取,檢索,搜索或查看現有條目,或詳細檢索特定的條目(詳細視圖)
更新 –更新或編輯數據庫表中的現有條目
刪除 –刪除,停用或刪除數據庫表中的現有條目正則表達式

Django CRUD(建立,檢索,更新,刪除)基於函數的視圖

使用示例說明如何建立和使用CRUD視圖考慮一個名爲的項目,其中geeksforgeeks有一個名爲的應用geeks數據庫

在擁有一個項目和一個應用程序以後,讓咱們建立一個模型,咱們將經過咱們的視圖建立其模型。geeks/models.pydjango


# 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文件夾中建立一個文件ide

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.htmlfetch

<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


圖片

相關文章
相關標籤/搜索