模型:

from django.db import models

class Book(models.Model):
book_name = models.CharField(max_length=30)
book_publisher = models.CharField(max_length=20)
book_author = models.CharField(max_length=20) class Meta:
db_table = 'book_tb'

  

路由:

from django.contrib import admin
from django.urls import path
from app01 import views urlpatterns = [
path('admin/', admin.site.urls),
path('index/',views.index), #首頁的路由
path('add/',views.add), #新增資料的路由
path('edit/',views.edit), #編輯資料的路由
path('delete/',views.delete) #刪除資料的路由
]

  

檢視:

from django.shortcuts import render,HttpResponse,redirect
from django import forms
from app01.models import Book #定義一個form表單的類,使用Book模型
class BookForm(forms.ModelForm):
class Meta:
model = Book
fields = ['book_name','book_publisher','book_author'] #生成表單的時候顯示的欄位 #首頁展示所有書籍(常規操作)
def index(request):
books = Book.objects.all()
return render(request,'index.html',{'books': books}) #新增書籍(使用ModelForm的功能)
def add(request):
if request.method == 'GET':
b_obj = BookForm()
return render(request,'add.html',{'b_obj': b_obj}) #返回一個新增頁面,展示一個空的form表單
else:
b_obj = BookForm(request.POST) #當用戶提交資料後例項化一個擁有提交了的資料的物件
if b_obj.is_valid(): #如果資料通過校驗
b_obj.save() #儲存到資料庫中,新增一條記錄
return redirect('/index/') #提交成功後跳轉到首頁 #編輯書籍(使用ModelForm的功能)
def edit(request):
if request.method == 'GET':
id = request.GET.get('id') #獲取要編輯的書籍的id
book = Book.objects.get(id=id) #取出id值對應的書籍物件
b_obj = BookForm(instance=book) # ***這一步例項化的時候,需要傳入書籍物件,生成表單的時候就會預設填充這些資料,這也是和新增操作唯一的不同之處
return render(request,'edit.html',{'b_obj': b_obj})
else:
#除了 b_obj = BookForm(instance=book) ,其餘操作和新增相同
b_obj = BookForm(request.POST)
if b_obj.is_valid():
b_obj.save()
return redirect('/index/') #刪除書籍(常規操作)
def delete(request):
id = request.GET.get('id') # 獲取要刪除的書籍的id
book = Book.objects.get(id=id) # 取出id值對應的書籍物件
book.delete() #從資料庫中刪除這個書籍物件
return redirect('/index/') #刪除後跳轉至首頁

  

首頁:index.html

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Index</title>
</head>
<body>
<div style="width: 60%;margin-left: 200px;">
<button><a href="/add/">新增</a></button>
<table style="width: 100%">
<tr>
<th style="border: red 1px solid">ID</th>
<th style="border: red 1px solid">書名</th>
<th style="border: red 1px solid">出版社</th>
<th style="border: red 1px solid">作者</th>
<th style="border: red 1px solid">編輯</th>
<th style="border: red 1px solid">刪除</th>
</tr>
{% for book in books %}
<tr>
<td style="border: red 1px solid">{{ book.id }}</td>
<td style="border: red 1px solid">{{ book.book_name }}</td>
<td style="border: red 1px solid">{{ book.book_publisher }}</td>
<td style="border: red 1px solid">{{ book.book_author }}</td>
<td style="border: red 1px solid"><button><a href="/edit/?id={{ book.id }}">編輯</a></button></td> {# 需要傳入要編輯的書籍的id #}
<td style="border: red 1px solid"><button><a href="/delete/?id={{ book.id }}">刪除</a></button></td> {# 需要傳入要刪除的書籍的id #}
</tr>
{% endfor %} </table>
</div>
</body>
</html>

  

新增頁面:add.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>新增頁面</title>
</head>
<body>
<div style="width: 60%;margin-left: 200px;">
<form action="" method="post">
{% csrf_token %}
<div>
{{ b_obj.as_p }}
</div> <input type="submit" value="提交">
</form>
</div>
</body>
</html>

  

編輯頁面:edit.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>編輯頁面</title>
</head>
<body>
<div style="width: 60%;margin-left: 200px;">
<form action="" method="post">
{% csrf_token %}
<div>
{{ b_obj.as_p }}
</div> <input type="submit" value="提交">
</form>
</div>
</body>
</html>

  

結果展示: