开发图书增删改查页面
需求:
1.列出图书列表、出版社列表、作者列表
2.点击作者,会列出其出版的图书列表
3.点击出版社,会列出旗下图书列表
4.可以创建、修改、删除 图书、作者、出版社
主页信息:
http://127.0.0.1:8000/index/
model.py
from django.db import models # Create your models here. class Book(models.Model): """书表""" id = models.AutoField(primary_key=True) title = models.CharField(max_length=32) publish_date = models.DateField() publisher = models.ForeignKey("Publisher",on_delete=models.CASCADE) author = models.ManyToManyField("Author") class Publisher(models.Model): '''出版社表''' id = models.AutoField(primary_key=True) pname = models.CharField(max_length=32) class Author(models.Model): '''作者表''' id = models.AutoField(primary_key=True) aname = models.CharField(max_length=32)
urls.py
from django.contrib import admin from django.urls import path, re_path from app01 import views urlpatterns = [ path('admin/', admin.site.urls), path('index/', views.index), path('book/', views.book), path('addbook/', views.addbook), re_path(r"^delbook/", views.delbook), #delbook(request,2) re_path(r"^editbook/", views.editbook), #re_path(r"query",views.query), re_path(r'^publisher', views.publisher), re_path(r'^addpublisher', views.addpublisher), re_path(r'^delpublisher', views.delpublisher), re_path(r'^editpublisher', views.editpublisher), re_path(r'^publisher_book', views.publisher_book), re_path(r'^author/', views.author), re_path(r'^addauthor', views.addauthor), re_path(r'^delauthor', views.delauthor), re_path(r'^editauthor', views.editauthor), re_path(r'^author_book', views.author_book), ]
views.py
from django.shortcuts import render, HttpResponse, redirect # Create your views here. from app01.models import Book from app01 import models #主页 def index(request): return render(request,"index.html") #添加书籍 def addbook(request): if request.method == 'POST': title = request.POST.get("title") pid = request.POST.get("pid") publish_date = request.POST.get("pub_date") authors = request.POST.getlist("aids") models.Book.objects.create(title=title,publish_date=publish_date,publisher_id=pid) new_book = models.Book.objects.get(title=title) new_book.author.set(authors) return redirect("/book/") pub_list = models.Publisher.objects.all() author_list = models.Author.objects.all() return render(request, "addbook.html", {"pub_list": pub_list, "author_list": author_list}) #查看图书 def book(request): book_list = Book.objects.all() return render(request, "book.html", {"book_list":book_list}) #删除书籍 def delbook(request): bid = request.GET.get("bid") book_obj = models.Book.objects.filter(id=bid).first() book_obj.delete() return redirect("/book/") #编辑书籍 def editbook(request): bid = request.GET.get("bid") book_obj = models.Book.objects.filter(id=bid).first() if request.method == "POST": title = request.POST.get("title") pid = request.POST.get("pid") publish_date = request.POST.get("pub_date") authors = request.POST.getlist("aids") models.Book.objects.filter(id=bid).update(title=title, publish_date=publish_date, publisher_id=pid) edit_book = models.Book.objects.get(id=bid) edit_book.author.set(authors) return redirect("/book/") pub_list = models.Publisher.objects.all() author_list = models.Author.objects.all() return render(request,"editbook.html",{"book_obj":book_obj,"pub_list": pub_list, "author_list": author_list}) # def query(request): # ret = Book.objects.filter(publish="老男孩出版社", price__gt=200) # ret = Book.objects.filter(title__startswith="py") # return HttpResponse("ok") #查看出版社 def publisher(request): publisher_list = models.Publisher.objects.all() return render(request, "publisher.html",{"publisher_list":publisher_list} ) def pub_is_valid(xname): """验证出版社信息""" if models.Publisher.objects.filter(pname=xname).count() != 0: return {"status": "该出版社已存在!"} #增加出版社 def addpublisher(request): if request.method == 'POST': pname = request.POST.get("pname") ret = pub_is_valid(pname) # print(ret) if ret: ret["pname"] = pname return render(request,"addpublisher.html",ret) else: models.Publisher.objects.create(pname=pname) return redirect("/publisher/") return render(request, "addpublisher.html") #编辑出版社 def editpublisher(request): pid = request.GET.get("pid") pub_obj = models.Publisher.objects.filter(id=pid).first() if request.method == "POST": pname = request.POST.get("pname") ret = pub_is_valid(pname) if ret: pub_obj.pname = pname ret["pub_obj"] = pub_obj return render(request,"editpublisher.html",ret) else: models.Publisher.objects.filter(id=pid).update(pname=pname) return redirect("/publisher/") return render(request, "editpublisher.html", {"pub_obj":pub_obj}) #删除出版社 def delpublisher(request): pid = request.GET.get("pid") publisher_obj = models.Publisher.objects.filter(id=pid).first() publisher_obj.delete() return redirect("/publisher/") #出版社关联书籍 def publisher_book(request): pid = request.GET.get("pid") pub_obj = models.Publisher.objects.filter(id=pid).first() pname = pub_obj.pname book_list = pub_obj.book_set.all() return render(request, "publisher_book.html") #查看作者 def author(request): author_list = models.Author.objects.all() return render(request, "author.html", {"author_list":author_list}) def author_is_valid(xname): """验证作者信息""" if models.Author.objects.filter(aname=xname).count() != 0: return {"status": "该作者已存在!"} def addauthor(request): if request.method == 'POST': aname = request.POST.get("aname") ret = author_is_valid(aname) if ret: ret["aname"] = aname return render(request,"addauthor.html",ret) else: models.Author.objects.create(aname=aname) return redirect("/author/") return render(request, "addauthor.html") def delauthor(request): aid = request.GET.get("aid") author_obj = models.Author.objects.filter(id=aid).first() author_obj.delete() return redirect("/author/") # 编辑作者 def editauthor(request): aid = request.GET.get("aid") author_obj = models.Author.objects.filter(id=aid).first() if request.method == "POST": aname = request.POST.get("aname") ret = author_is_valid(aname) if ret: author_obj.aname = aname ret["author_obj"] = author_obj return render(request,"editauthor.html",ret) else: models.Author.objects.filter(id=aid).update(aname=aname) return redirect("/author/") return render(request,"editauthor.html",{"author_obj":author_obj}) #作者关联书籍;多对多 def author_book(request): aid = request.GET.get("aid") author_obj = models.Author.objects.filter(id=aid).first() aname = author_obj.aname book_list = author_obj.book_set.all() return render(request, "author_book.html")
settings.py
base.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <link rel="stylesheet" href="/static/bs/css/bootstrap.css"> 7 8 </head> 9 <body> 10 <div class="container"> 11 <h2>图书管理系统</h2> 12 <br> 13 </div> 14 15 <div class="container"> 16 <ul class="nav nav-tabs" id="myTab"> 17 <li role="presentation" class="active"><a href="/index/">主页</a></li> 18 <li role="presentation"><a href="/book/">图书</a></li> 19 <li role="presentation"><a href="/author/">作者</a></li> 20 <li role="presentation"><a href="/publisher/">出版社</a></li> 21 </ul> 22 </div> 23 <br> 24 25 {% block content %} 26 {% endblock %} 27 28 29 </body> 30 <script src="/static/js/jquery-3.3.1.js"></script> 31 <script src="/static/bs/js/bootstrap.js"></script> 32 33 <script> 34 {% block script %} 35 {% endblock %} 36 </script> 37 </html>