圖書管理系統(tǒng)表設(shè)計(jì)結(jié)構(gòu)
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供唐縣網(wǎng)站建設(shè)、唐縣做網(wǎng)站、唐縣網(wǎng)站設(shè)計(jì)、唐縣網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、唐縣企業(yè)網(wǎng)站模板建站服務(wù),10余年唐縣做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
author的id對(duì)應(yīng)author_book的author_id
book的id對(duì)應(yīng)author_book的book_id
#########orm工具設(shè)置
D:\mysite\polls\models.py
orm:對(duì)像關(guān)系映射,將Python語法自動(dòng)轉(zhuǎn)換成sql語句
from django.db import models
#書
class Book(models.Model):
id = models.AutoField(primary_key=True) # 自增的ID主鍵
#創(chuàng)建一個(gè)varchar(64)的唯一的不為空的字段
title = models.CharField(max_length=64, null=False, unique=True)
#和出版社關(guān)聯(lián)的外鍵字段
publisher = models.ForeignKey(to="Publisher", on_delete=models.CASCADE)
#作者表
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=16, null=False, unique=True)
#告訴ORM 我這張表和book表是多對(duì)多的關(guān)聯(lián)關(guān)系,ORM自動(dòng)幫我生成了第三張表
book = models.ManyToManyField(to="Book")
def __str__(self):
return "".format(self.name)
會(huì)生成三張表
polls_book表
polls_author表
polls_author_books表
#########主url設(shè)置
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('polls/',include('polls.urls')),
path('admin/', admin.site.urls),
]
#########應(yīng)用url設(shè)置
D:\mysite\polls\urls.py
from django.urls import path
from . import views
app_name = 'polls'
urlpatterns = [
#書相關(guān)的對(duì)應(yīng)關(guān)系
path('book_list/', views.book_list,name='book_list'),
path('add_book/', views.add_book,name='add_book'), # 添加書籍
path('delete_book/', views.delete_book,name='delete_book'), # 刪除書籍
path('edit_book/', views.edit_book,name='edit_book'), # 編輯書籍
# 作者相關(guān)的對(duì)應(yīng)關(guān)系
path('author_list/', views.author_list,name='author_list'), # 展示作者
path('add_author/', views.add_author,name='add_author'), # 添加作者
path('delete_author/', views.delete_author,name='delete_author'), # 刪除作者
path('edit_author/', views.edit_author,name='edit_author'), # 編輯作者
]
#########后端函數(shù)
D:\mysite\polls\views.py
from django.shortcuts import render,redirect,HttpResponse
from .models import Question,Publisher
from polls import models
#展示書的列表
def book_list(request):
# 去數(shù)據(jù)庫(kù)中查詢所有的書籍
all_book = models.Book.objects.all()
#在HTML頁(yè)面完成字符串替換(渲染數(shù)據(jù))
return render(request, "polls/book_list.html", {"all_book": all_book})
#添加書籍
def add_book(request):
if request.method == "POST":
new_title = request.POST.get("book_title")
new_publisher_id = request.POST.get("publisher")
#創(chuàng)建新書對(duì)象,自動(dòng)提交
models.Book.objects.create(title=new_title, publisher_id=new_publisher_id)
#返回到書籍列表頁(yè)
return redirect("/polls/book_list/")
#取到所有的出版社
ret = models.Publisher.objects.all()
return render(request, "polls/add_book.html", {"publisher_list": ret})
#刪除書籍
def delete_book(request):
#從URL里面獲取要?jiǎng)h除的書籍的id值
delete_id = request.GET.get("id") # 從URL里面取數(shù)據(jù)
#去刪除數(shù)據(jù)庫(kù)中刪除指定id的數(shù)據(jù)
models.Book.objects.get(id=delete_id).delete()
#返回書籍列表頁(yè)面, 查看是否刪除成功
return redirect("/polls/book_list/")
#編輯書籍
def edit_book(request):
if request.method == "POST":
# 從提交的數(shù)據(jù)里面取,書名和書關(guān)聯(lián)的出版社
edit_id = request.POST.get("id")
new_title = request.POST.get("book_title")
new_publisher_id = request.POST.get("publisher")
#更新
edit_book_obj = models.Book.objects.get(id=edit_id)
edit_book_obj.title = new_title # 更新書名
edit_book_obj.publisher_id = new_publisher_id # 更新書籍關(guān)聯(lián)的出版社
#將修改提交到數(shù)據(jù)庫(kù)
edit_book_obj.save()
#返回書籍列表頁(yè)面,查看是否編輯成功
return redirect("/polls/book_list/")
#返回一個(gè)頁(yè)面,讓用戶編輯書籍信息
#取到編輯的書的id值
edit_id = request.GET.get("id")
#根據(jù)id去數(shù)據(jù)庫(kù)中把具體的書籍對(duì)象拿到
edit_book_obj = models.Book.objects.get(id=edit_id)
ret = models.Publisher.objects.all()
return render(
request,
"polls/edit_book.html",
{"publisher_list": ret, "book_obj": edit_book_obj}
)
#作者列表頁(yè)
def author_list(request):
# 查詢所有的作者
all_author = models.Author.objects.all()
return render(request, "polls/author_list.html", {"author_list": all_author})
#添加作者
def add_author(request):
if request.method == "POST":
print("in post...")
#取到提交的數(shù)據(jù)
new_author_name = request.POST.get("author_name")
#post提交的數(shù)據(jù)是多個(gè)值的時(shí)候一定會(huì)要用getlist,如多選的checkbox和多選的select
books = request.POST.getlist("books")
#創(chuàng)建作者
new_author_obj = models.Author.objects.create(name=new_author_name)
#把新作者和書籍建立對(duì)應(yīng)關(guān)系,自動(dòng)提交
new_author_obj.book.set(books)
#跳轉(zhuǎn)到作者列表頁(yè)面,查看是否添加成功!
return redirect("/polls/author_list/")
#查詢所有的書籍
ret = models.Book.objects.all()
return render(request, "polls/add_author.html", {"book_list": ret})
#刪除作者
def delete_author(request):
# 從URL里面取到要?jiǎng)h除的作者id
delete_id = request.GET.get("id")
#根據(jù)ID值取到要?jiǎng)h除的作者對(duì)象,直接刪除
#1. 去作者表把作者刪了
#2. 去作者和書的關(guān)聯(lián)表,把對(duì)應(yīng)的關(guān)聯(lián)記錄刪除了
models.Author.objects.get(id=delete_id).delete()
#返回作者列表頁(yè)面
return redirect("/polls/author_list/")
#編輯作者
def edit_author(request):
# 如果編輯完提交數(shù)據(jù)過來
if request.method == "POST":
# 拿到提交過來的編輯后的數(shù)據(jù)
edit_author_id = request.POST.get("author_id")
new_author_name = request.POST.get("author_name")
# 拿到編輯后作者關(guān)聯(lián)的書籍信息
new_books = request.POST.getlist("books")
# 根據(jù)ID找到當(dāng)前編輯的作者對(duì)象
edit_author_obj = models.Author.objects.get(id=edit_author_id)
# 更新作者的名字
edit_author_obj.name = new_author_name
# 更新作者關(guān)聯(lián)的書的對(duì)應(yīng)關(guān)系
edit_author_obj.book.set(new_books)
# 將修改提交到數(shù)據(jù)庫(kù)
edit_author_obj.save()
# 返回作者列表頁(yè),查看是否編輯成功
return redirect("/polls/author_list/")
# 從URL里面取要編輯的作者的id信息
edit_id = request.GET.get("id")
# 找到要編輯的作者對(duì)象
edit_author_obj = models.Author.objects.get(id=edit_id)
# 查詢所有的書籍對(duì)象
ret = models.Book.objects.all()
return render(request, "polls/edit_author.html", {"book_list": ret, "author": edit_author_obj})
#########靜態(tài)html文件
#book列表頁(yè)
D:\mysite\polls\templates\polls\book_list.htmll
書籍列表
所有的書籍都在這里!
添加書籍
id
title
publisher
操作
{% for i in all_book %}
{{ i.id }}
{{ i.title }}
{{ i.publisher.name }}
刪除
編輯
{% endfor %}
##book添加頁(yè)
D:\mysite\polls\templates\polls\add_book.html
添加書籍
添加書籍
#book編輯頁(yè)
D:\mysite\polls\templates\polls\edit_book.html
編輯書籍
編輯書籍
#作者列表頁(yè)
D:\mysite\polls\templates\polls\author_list.htm
作者列表
添加新的作者
所有的作者
#
ID
名字
作品
操作
{% for author in author_list %}
{{ forloop.counter }}
{{ author.id }}
{{ author.name }}
{% for book in author.book.all %}
{{ book.title }}?
{% endfor %}
刪除
編輯
{% endfor %}
#作者添加頁(yè)
D:\mysite\polls\templates\polls\add_author.html
添加作者
添加作者
#作者編輯頁(yè)
D:\mysite\polls\templates\polls\edit_author.html
編輯作者
編輯作者
模板里author.book.all的含義
#web展示
作者列表頁(yè)
作者添加頁(yè)
作者編輯頁(yè)