开发图书增删改查页面
需求:
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>
View Code

相关文章: