菜鸟学做Django--图书管理系统


一、数据库展示

创建user ,publisher,book,author数据库名

from django.db import models

# Create your models here.
class User(models.Model):
    username=models.CharField(max_length=128,verbose_name='用户名',null=False)
    password=models.CharField(max_length=128,verbose_name='密码',null=False)
    email=models.CharField(max_length=255,verbose_name='邮箱',null=False)


class Publisher(models.Model):
    id=models.AutoField(primary_key=True)
    name=models.CharField(max_length=32)
    address=models.CharField(max_length=32)



class Book(models.Model):
    id=models.AutoField(primary_key=True)
    title=models.CharField(max_length=32)
    price=models.DecimalField(max_digits=5,decimal_places=2,default=10.01)
    inventory=models.IntegerField(verbose_name="库存数")
    sale_num=models.IntegerField(verbose_name="卖出数")
    publisher=models.ForeignKey(to='Publisher',on_delete=models.CASCADE)



class Author(models.Model):
    id=models.AutoField(primary_key=True)
    name=models.CharField(max_length=32)
    book=models.ManyToManyField(to='Book')

二、视图(view)展示



import redis
from django.http import HttpResponse
from django.shortcuts import render,redirect
from app01.models import Publisher,Book,Author,User
# from alipay import AliPay
# Create your views here.
from django.views import View
from django.core.mail import send_mail
import random
class Index(View):
    def get(self,request):
        return render(request,'index.html',locals())
    def post(self,request):
        return render(request,'index.html',locals())


from bookproject.settings import REDIS_CON


def vercode(user):
    res1 = ""
    for i in range(4):
        num = random.randint(0, 9)
        res1 += str(num)
    REDIS_CON.set(f'{user}', res1)
    print(type(user))
    REDIS_CON.expire(f'{user}', 300)
    return res1
class Send_email(View):
    def get(self,request):
        subject='邮箱标题'
        from_email='3246609065@qq.com'
        a= request.GET.get('email')
        message = vercode(a)
        recipient_list = [a,]
        send_mail(subject=subject, message=message, from_email=from_email, recipient_list=recipient_list)
        return render(request,'sendemail.html',locals())
    def post(self,request):
        msg = ''
        yzm=request.POST.get('yzm')

        a=request.POST.get('username')

        b=request.POST.get('password')

        c=request.POST.get('email')

        d = REDIS_CON.get(c)
        if a=='' or b=='' or c=='':
            msg='信息不能为空'
            return render(request, 'sendemail.html', locals())
        if yzm != d:
            msg='验证码不正确'
            return render(request, 'sendemail.html', locals())
        User.objects.create(username=a,password=b,email=c).save()
        msg='注册成功'
        return render(request, 'sendemail.html', locals())



class Login(View):
    def get(self,request):
        return render(request,'login.html',locals())
    def post(self,request):
        return render(request,'login.html',locals())



class Add_Publisher(View):
    def get(self,request):
        return render(request,'add_publisher.html',locals())
    def post(self,request):
        error_msg=''
        name=request.POST.get('name')
        address=request.POST.get('address')
        if name=='' or address=='':
            error_msg = '信息不能为空'
            return render(request, 'add_publisher.html', locals())
        Publisher.objects.create(name=name,address=address).save()
        error_msg='提交成功'
        return redirect('/app01/publisher_list/',locals())


class Publisher_List(View):
    def get(self,request):
        publisher_obj_list = Publisher.objects.all()
        return render(request,'publisher_list.html',locals())
    def post(self,request):
        publisher_obj_list=Publisher.objects.all()
        return render(request, 'publisher_list.html', locals())

class Delete_Publisher(View):
    def get(self,request):
        id=request.GET.get('id')
        Publisher.objects.filter(id=id).delete()
        return redirect('/app01/publisher_list/',locals())



class Edit_Publisher(View):
    def get(self,request):
        id=request.GET.get('id')
        publisher_obj=Publisher.objects.get(id=id)
        publisher_obj_list=Publisher.objects.all()
        return render(request,'edit_publisher.html',locals())
    def post(self,request):
        id=request.POST.get('id')
        name = request.POST.get('name')
        address=request.POST.get('address')
        publisher_obj=Publisher.objects.get(id=id)
        publisher_obj.name = name
        publisher_obj.address = address
        publisher_obj.save()
        publisher_obj_list=Publisher.objects.all()
        return redirect('/app01/publisher_list/',locals())


class Book_List(View):
    def get(self,request):
        book_obj_list = Book.objects.all()
        return render(request,'book_list.html',locals())
    def post(self,request):
        return render(request,'book_list.html',locals())



class Add_Book(View):
    def get(self,request):
        publisher_obj_list=Publisher.objects.all()
        return render(request,'add_book.html',locals())
    def post(self,request):
        name=request.POST.get('title')
        publisher_id=request.POST.get('publisher_id')
        price=request.POST.get('price')
        inventory=request.POST.get('inventory')
        sale_num=request.POST.get('sale_num')
        Book.objects.create(title=name,publisher_id=publisher_id,price=price,inventory=inventory,sale_num=sale_num).save()
        return redirect('/app01/book_list/',locals())




class Delete_Book(View):
    def get(self,request):
        id=request.GET.get('id')
        Book.objects.filter(id=id).delete()
        return redirect('/app01/book_list')




class Edit_Book(View):
    def get(self,request):
        id=request.GET.get('id')
        book_obj=Book.objects.filter(id=id).first()
        publisher_list=Publisher.objects.all()
        return render(request,'edit_book.html',locals())
    def post(self,request):
        id=request.POST.get('id')
        name=request.POST.get('name')
        price=request.POST.get('price')
        inventory=request.POST.get('inventory')
        sale_num=request.POST.get('sale_num')
        publisher_id=request.POST.get('publisher_id')
        Book.objects.filter(id=id).update(title=name,publisher_id=publisher_id,price=price,inventory=inventory,sale_num=sale_num)
        return redirect('/app01/book_list/',locals())




class Author_list(View):
    def get(self,request):
        ret_list = []

        author_obj_list = Author.objects.all()
        for author_obj in author_obj_list:
            book_obj_list = author_obj.book.all()
            print(author_obj)
            print(book_obj_list)
            ret_dic = {}
            ret_dic['author_obj'] = author_obj
            ret_dic['book_list'] = book_obj_list
            ret_list.append(ret_dic)
        return render(request,'author_list.html',locals())
    def post(self,request):
        return render(request, 'author_list.html', locals())





class Add_Author(View):
    def get(self,request):
        book_obj_list=Book.objects.all()
        return render(request,'add_author.html',locals())
    def post(self,request):
        name=request.POST.get('name')
        book_ids=request.POST.getlist('books')
        author_obj=Author.objects.create(name=name)
        author_obj.book.set(book_ids)
        return redirect('/app01/author_list/',locals())




class Delete_Author(View):
    def get(self,request):
        id=request.GET.get('id')
        Author.objects.filter(id=id).delete()
        return redirect('/app01/author_list/',locals())

class Edit_Author(View):
    def get(self,request):
        id=request.GET.get('id')
        author_obj=Author.objects.get(id=id)
        book_obj_list=Book.objects.all()
        return render(request,'edit_author.html',locals())
    def post(self,request):
        id=request.POST.get('id')
        name=request.POST.get('name')
        book_ids=request.POST.getlist('books')
        author_obj=Author.objects.filter(id=id).first()
        author_obj.name = name
        author_obj.book.set(book_ids)
        author_obj.save()
        return redirect('/app01/author_list/',locals())


三、路由(urls)展示


from django.contrib import admin
from django.conf.urls import url
from django.urls import path
from app01 import views

 from app01.views import Add_Publisher,Publisher_List,Delete_Publisher,Edit_Publisher

urlpatterns = [
    # path('admin/', admin.site.urls),
    # path('register/', views.Register.as_view()),
    # path('login/', views.Login.as_view()),
    path('publisher_list/', views.Publisher_List.as_view()),  # 出版社列表
    path('add_publisher/', views.Add_Publisher.as_view()),  # 添加出版社
    path('edit_publisher/', views.Edit_Publisher.as_view()),  # 修改出版社
    path('delete_publisher/', views.Delete_Publisher.as_view()),  # 删除出版社
    path('book_list/', views.Book_List.as_view()),  # 图书列表
    path('add_book/', views.Add_Book.as_view()),  # 图书列表
    path('delete_book/', views.Delete_Book.as_view()),  # 图书删除
    path('edit_book/', views.Edit_Book.as_view()),  # 修改图书
    path('author_list/', views.Author_list.as_view()),  # 作者列表
    path('add_author/', views.Add_Author.as_view()),  # 添加作者
    path('edit_author/', views.Edit_Author.as_view()),  # 编辑作者
    path('delete_author/', views.Delete_Author.as_view()),  # 删除作者
    # path('send_email/', views.send_email),
    # path('sendemail/', views.sendEmail),
    # path('test_alipay/', views.test_alipay),  # 删除作者
    path('sendemail/', views.Send_email.as_view()),
    path('login/', views.Login.as_view()),
    path('index/', views.Index.as_view()),

]

四、各前端展示

1.add_author.html

代码如下(示例):


<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>图书管理系统</title>

    <!-- Bootstrap -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
    <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
    <!--[if lt IE 9]>
      <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
   <!--分页名称-->
    <h1 class="text-center">图书管理系统</h1>
    <!--这是导航栏-->
  <nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="/app01/book_list/">首页</a>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li>
        <li class="active"><a href="/app01/author_list/">作者列表</a></li>
        <li class="active"><a href="/app01/publisher_list/">出版社列表</a></li>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">One more separated link</a></li>
          </ul>
        </li>
      </ul>
      <form class="navbar-form navbar-left">
        <div class="form-group">
          <input type="text" class="form-control" placeholder="Search">
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
      </form>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Link</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
          </ul>
        </li>
      </ul>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>
   <!--这是表格-->
  <form action="" method="post">
  <h3 style="color: #3c763d">添加作者</h3>
    {% csrf_token %}
    <p>
        作者名称: <input type="text"  name="name">
    </p>
    <p>
        书本名称:
       <select  multiple  name="books" >
       {% for book_obj in book_obj_list %}
            <option value="{{ book_obj.title }}">{{ book_obj.title }}</option>
       {% endfor %}
      </select>
   </p>

    <p>
       <button type="submit" class="btn">提交</button>
  </p>

</form>

  </body>
</html>

2.publisher_list.html

代码如下(示例):


<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>图书管理系统</title>

    <!-- Bootstrap -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
    <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
    <!--[if lt IE 9]>
     <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
   <!--分页名称-->
    <h1 class="text-center">图书管理系统</h1>
    <!--这是导航栏-->
    <nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="/app01/book_list/">首页</a>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li>
        <li class="active"><a href="/app01/author_list/">作者列表</a></li>
        <li class="active"><a href="/app01/publisher_list/">出版社列表</a></li>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">One more separated link</a></li>
          </ul>
        </li>
      </ul>
      <form class="navbar-form navbar-left">
        <div class="form-group">
          <input type="text" class="form-control" placeholder="Search">
        </div>
        <button type="submit" class="btn btn-default">搜索</button>
      </form>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Link</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
          </ul>
        </li>
      </ul>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>
   <h3 style="color: #3c763d">出版社列表</h3>
   <!--这是表格-->
    <a href="/app01/add_publisher/">添加出版社</a>
<table border="1" class = "table table-hover table-bordered">
        <thead>
            <tr>
                <th>序号</th>
                <th>出版社id</th>
                <th>名称</th>
                <th>地址</th>
                <th>操作</th>
            </tr>
        </thead>
      <tbody>
       {% for publisher_obj in publisher_obj_list %}
            <tr>
               <td> {{ forloop.counter }}</td>
               <td> {{ publisher_obj.id }}</td>
               <td> {{ publisher_obj.name }}</td>
               <td> {{ publisher_obj.address }}</td>
               <td><a href="/app01/edit_publisher/?id={{ publisher_obj.id }}">修改</a></td>
               <td><a href="/app01/delete_publisher/?id={{ publisher_obj.id }}">删除</a></td>
            </tr>
       {% endfor %}
      </tbody>
</table>
  <!--这是页码-->
<nav aria-label="Page navigation">
  <ul class="pagination">
    <li>
      <a href="#" aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
      </a>
    </li>
    <li><a href="#">1</a></li>
    <li><a href="#">2</a></li>
    <li><a href="#">3</a></li>
    <li><a href="#">4</a></li>
    <li><a href="#">5</a></li>
    <li>
      <a href="#" aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
      </a>
    </li>
  </ul>
</nav>


  </body>
</html>

3.add_publisher.html


<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>图书管理系统</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
     <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <h1 class="text-center">图书管理系统</h1>
  <nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="/app01/book_list/">首页</a>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li>
        <li class="active"><a href="/app01/author_list/">作者列表</a></li>
        <li class="active"><a href="/app01/publisher_list/">出版社列表</a></li>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">One more separated link</a></li>
          </ul>
        </li>
      </ul>
      <form class="navbar-form navbar-left">
        <div class="form-group">
          <input type="text" class="form-control" placeholder="Search">
        </div>
        <button type="submit" class="btn btn-default">搜索</button>
      </form>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Link</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
          </ul>
        </li>
      </ul>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>
  <form action="" method="post">
  <h3 style="color: #3c763d">添加出版社</h3>
    {% csrf_token %}
    <p>
        出版社名称: <input type="text"  name="name">
    </p>
    <p>
        出版社地址:<input type="text" name="address">
    </p>
    <p>
       <button type="submit" class="btn">提交</button>
    </p>

</form>
{{ error_msg }}

  </body>
</html>

4.edit_publisher.html


<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>图书管理系统</title>

    <!-- Bootstrap -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
    <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
    <!--[if lt IE 9]>
      <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
   <!--分页名称-->
    <h1 class="text-center">图书管理系统</h1>
    <!--这是导航栏-->
  <nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="/app01/book_list/">首页</a>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li>
        <li class="active"><a href="/app01/author_list/">作者列表</a></li>
        <li class="active"><a href="/app01/list/">出版社列表</a></li>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">One more separated link</a></li>
          </ul>
        </li>
      </ul>
      <form class="navbar-form navbar-left">
        <div class="form-group">
          <input type="text" class="form-control" placeholder="Search">
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
      </form>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Link</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
          </ul>
        </li>
      </ul>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>

   <!--这是表格-->
  <form action="" method="post">
  <h3 style="color: #3c763d">编辑书籍</h3>
    {% csrf_token %}
    <p>
        出版社id: <input type="text" name="id" value="{{ publisher_obj.id }}">

    </p>
    <p>
        出版社名称: <input type="text"  name="name" value="{{ publisher_obj.name }}">
    </p>

    <p>
        出版社地址:
        <input type="text" name="address" value="{{ publisher_obj.address }}">
{#         <select name="address" id="">#}
{#             {% for publisher_obj in publisher_obj_list%}#}
{#                 {% if publisher_obj in  publisher_obj.publisher.all%}#}
{#                    <option  selected value="{{ publisher_obj.id }}">{{ publisher_obj.address }}</option>#}
{#                 {% else %}#}
{#                     <option value="{{ publisher_obj.id }}">{{ publisher_obj.address}}</option>#}
{#                 {% endif %}#}
{#             {%endfor %}#}
     </p>
    <p>
        <button type="submit" class="btn">提交</button>
    </p>

</form>


  </body>
</html>

5.book_list.html


<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>图书管理系统</title>

    <!-- Bootstrap -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
    <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
    <!--[if lt IE 9]>
     <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
</head>
<body>
<!--分页名称-->
<h1 class="text-center">图书管理系统</h1>
<!--这是导航栏-->
<nav class="navbar navbar-inverse">
    <div class="container-fluid">
        <!-- Brand and toggle get grouped for better mobile display -->
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                    data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="/app01/book_list/">首页</a>
        </div>

        <!-- Collect the nav links, forms, and other content for toggling -->
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li>
                <li class="active"><a href="/app01/author_list/">作者列表</a></li>
                <li class="active"><a href="/app01/publisher_list/">出版社列表</a></li>
                <ul class="dropdown-menu">
                    <li><a href="#">Action</a></li>
                    <li><a href="#">Another action</a></li>
                    <li><a href="#">Something else here</a></li>
                    <li role="separator" class="divider"></li>
                    <li><a href="#">Separated link</a></li>
                    <li role="separator" class="divider"></li>
                    <li><a href="#">One more separated link</a></li>
                </ul>
                </li>
            </ul>
            <form class="navbar-form navbar-left">
                <div class="form-group">
                    <input type="text" class="form-control" placeholder="Search">
                </div>
                <button type="submit" class="btn btn-default">搜索</button>
            </form>
            <ul class="nav navbar-nav navbar-right">
                <li><a href="#">Link</a></li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                       aria-expanded="false">Dropdown <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">Action</a></li>
                        <li><a href="#">Another action</a></li>
                        <li><a href="#">Something else here</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">Separated link</a></li>
                    </ul>
                </li>
            </ul>
        </div><!-- /.navbar-collapse -->
    </div><!-- /.container-fluid -->
</nav>
<!--这是表格-->
<div class="container-fluid">
    <div class="row-fluid">
        <div class="span12">
            <h3 class="text-success">
                图书列表
            </h3>
            <a class="tian" style="color:#f82f48;font-weight: 900" href="/app01/add_book/">添加图书</a>
            <table class="table table-hover table-bordered">
                <thead>
                <tr>
                    <th>序号</th>
                    <th>图书id</th>
                    <th>名称</th>
                    <th>价格/元</th>
                    <th>库存/册</th>
                    <th>卖出数/册</th>
{#                    <th>作者</th>#}
                    <th>出版社名称</th>
                    <th>出版社地址</th>
                    <th>操作</th>
                </tr>
                </thead>
            <tbody>
               {% for book_obj in book_obj_list %}
                   <tr>
                       <td> {{ forloop.counter }}</td>
                       <td> {{ book_obj.id }}    </td>
                       <td> {{ book_obj.title }} </td>
                       <td> {{ book_obj.price }} </td>
                       <td> {{ book_obj.inventory }} </td>
                       <td> {{ book_obj.sale_num }} </td>
{#                        <td>#}
{#                            {% for author_obj in author_obj_list %}#}
{#                                {% if book_obj in book_obj.book.all %}#}
{#                                    <option  selected value="{{ author_obj.id }}">{{ author_obj.name }}</option>#}
{#                                {% endif %}#}
{#                            {% endfor %}#}
{#                        </td>#}

                       <td> {{ book_obj.publisher.name }}</td>
                       <td> {{ book_obj.publisher.address }}</td>

                       <td>
                            <a href="/app01/edit_book/?id={{ book_obj.id }}">修改</a>
                            <a href="/app01/delete_book/?id={{ book_obj.id }}">删除</a>
                       </td>

                    </tr>
               {% endfor %}
            </tbody>
            </table>
        </div>
    </div>
</div>
<!--这是页码-->
<nav aria-label="Page navigation">
    <ul class="pagination">
        <li>
            <a href="#" aria-label="Previous">
                <span aria-hidden="true">&laquo;</span>
            </a>
        </li>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
        <li><a href="#">4</a></li>
        <li><a href="#">5</a></li>
        <li>
            <a href="#" aria-label="Next">
                <span aria-hidden="true">&raquo;</span>
            </a>
        </li>
    </ul>
</nav>


</body>
</html>

6.add_book.html


<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>图书管理系统</title>

    <!-- Bootstrap -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
    <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
    <!--[if lt IE 9]>
     <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
   <!--分页名称-->
    <h1 class="text-center">图书管理系统</h1>
    <!--这是导航栏-->
  <nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="/app01/book_list/">首页</a>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li>
        <li class="active"><a href="/app01/author_list/">作者列表</a></li>
        <li class="active"><a href="/app01/publisher_list/">出版社列表</a></li>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">One more separated link</a></li>
          </ul>
        </li>
      </ul>
      <form class="navbar-form navbar-left">
        <div class="form-group">
          <input type="text" class="form-control" placeholder="Search">
        </div>
        <button type="submit" class="btn btn-default">搜索</button>
      </form>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Link</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
          </ul>
        </li>
      </ul>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>
  <form action="" method="post">
  <h3 style="color: #3c763d">添加图书</h3>
    {% csrf_token %}
    <p>
        添加图书名称: <input type="text"  name="title">
    </p>
  <p>
        添加图书价格: <input type="text"  name="price">
    </p>
  <p>
        添加图书库存数: <input type="text"  name="inventory">
    </p>
  <p>
        添加图书卖出数: <input type="text"  name="sale_num">
    </p>
   <p>
        出版社:
       <select multiple name="publisher_id" >
       {% for publisher_obj in publisher_obj_list %}
            <option value="{{ publisher_obj.id }}">{{ publisher_obj.name }}</option>
       {% endfor %}
      </select>
   </p>
    <p>
       <button type="submit" class="btn">提交</button>
    </p>

</form>


  </body>
</html>

7.edit_book.html


<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>图书管理系统</title>

    <!-- Bootstrap -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
    <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
    <!--[if lt IE 9]>
      <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
   <!--分页名称-->
    <h1 class="text-center">图书管理系统</h1>
    <!--这是导航栏-->
  <nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="/app01/book_list/">首页</a>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li>
        <li class="active"><a href="/app01/author_list/">作者列表</a></li>
        <li class="active"><a href="/app01/publisher_list/">出版社列表</a></li>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">One more separated link</a></li>
          </ul>
        </li>
      </ul>
      <form class="navbar-form navbar-left">
        <div class="form-group">
          <input type="text" class="form-control" placeholder="Search">
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
      </form>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Link</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
          </ul>
        </li>
      </ul>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>

   <!--这是表格-->
  <form action="" method="post">
  <h3 style="color: #3c763d">编辑书籍</h3>
    {% csrf_token %}
    <p>
        图书id :<input type="text" name="id" placeholder="{{ book_obj.id }}" value="{{ book_obj.id }}">

    </p>
    <p>
        图书名称: <input type="text"  name="name" value="{{ book_obj.title }}">
    </p>
  <p>
        图书价格: <input type="text"  name="price" value="{{ book_obj.price }}">
    </p>
  <p>
        图书库存数: <input type="text"  name="inventory" value="{{ book_obj.inventory }}">
    </p>
  <p>
        图书卖出数: <input type="text"  name="sale_num" value="{{ book_obj.sale_num }}">
    </p>
     <p>
         出版社名称:
         <select name="publisher_id" id="publisher_id">
             {% for publisher_obj in publisher_list%}
                 {% if book_obj in  book_obj.book.all%}
                    <option  selected value="{{ publisher_obj.id }}">{{ publisher_obj.name }}</option>
                 {% else %}
                     <option value="{{ publisher_obj.id }}">{{ publisher_obj.name }}</option>
                 {% endif %}
             {%endfor %}


         </select>

     </p>
    <p>
        <button type="submit" class="btn">提交</button>
    </p>

</form>


  </body>
</html>

8.author_list.html


<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>图书管理系统</title>

    <!-- Bootstrap -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
    <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
    <!--[if lt IE 9]>
     <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
   <!--分页名称-->
    <h1 class="text-center">图书管理系统</h1>
    <!--这是导航栏-->
    <nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="/app01/book_list/">首页</a>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li>
        <li class="active"><a href="/app01/author_list/">作者列表</a></li>
        <li class="active"><a href="/app01/publisher_list/">出版社列表</a></li>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">One more separated link</a></li>
          </ul>
        </li>
      </ul>
      <form class="navbar-form navbar-left">
        <div class="form-group">
          <input type="text" class="form-control" placeholder="Search">
        </div>
        <button type="submit" class="btn btn-default">搜索</button>
      </form>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Link</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
          </ul>
        </li>
      </ul>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>
   <h3 style="color: #3c763d">作家列表</h3>
   <!--这是表格-->
    <a style="color: #ac2925", href="/app01/add_author/">添加作者</a>
    <table border="1"  class="table table-hover table-bordered">

    <thead>
    <tr>
        <th>序号</th>
        <th>作者id</th>
        <th>作者</th>
        <th style="text-align: center">图书</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
    {% for ret_dic in ret_list %}
        <tr>
        <td>{{ forloop.counter }}</td>
        <td>{{ ret_dic.author_obj.id}}</td>
        <td>{{ ret_dic.author_obj.name}}</td>
        <td>
            {% for book_obj in ret_dic.book_list %}
                {% if forloop.last%}
                    {{ book_obj.title }}
                {% else %}
                    {{ book_obj.title }} |
                {% endif %}
            {% endfor %}

        </td>

        <td>
             <a href="/app01/edit_author/?id={{ ret_dic.author_obj.id }}">修改</a>
             <a href="/app01/delete_author/?id={{ ret_dic.author_obj.id }}">删除</a>
         </td>

        </tr>
    {% endfor %}

     </tbody>

</table>
  <!--这是页码-->
    <nav aria-label="Page navigation">
  <ul class="pagination">
    <li>
      <a href="#" aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
      </a>
    </li>
    <li><a href="#">1</a></li>
    <li><a href="#">2</a></li>
    <li><a href="#">3</a></li>
    <li><a href="#">4</a></li>
    <li><a href="#">5</a></li>
    <li>
      <a href="#" aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
      </a>
    </li>
  </ul>
</nav>


  </body>
</html>

9.edit_author.html


<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>图书管理系统</title>

    <!-- Bootstrap -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
    <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
    <!--[if lt IE 9]>
      <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
   <!--分页名称-->
    <h1 class="text-center">图书管理系统</h1>
    <!--这是导航栏-->
  <nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="/app01/book_list/">首页</a>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active"><a href="/app01/book_list/">图书列表<span class="sr-only">(current)</span></a></li>
        <li class="active"><a href="/app01/author_list/">作者列表</a></li>
      <li class="active"><a href="/app01/publisher_list/">出版社列表</a></li>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">One more separated link</a></li>
          </ul>
        </li>
      </ul>
      <form class="navbar-form navbar-left">
        <div class="form-group">
          <input type="text" class="form-control" placeholder="Search">
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
      </form>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Link</a></li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
          </ul>
        </li>
      </ul>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>
   <!--这是表格-->
  <form action="" method="post">
  <h3 style="color: #3c763d">编辑作者</h3>
    {% csrf_token %}
     <p>
        作者id  : <input type="text"  name="id"  value="{{ author_obj.id }}">
    </p>
    <p>
        作者名称: <input type="text"  name="name"  value="{{ author_obj.name }}">
    </p>
   <p>
        书籍名称:
       <select  multiple name="books" id="" >
        {% for book_obj in book_obj_list %}
           {% if book_obj in book_obj.book.all %}
               <option selected value="{{ book_obj.id }}">{{ book_obj.title }}</option>
           {% else %}
               <option value="{{ book_obj.id }}">{{ book_obj.title }}</option>
           {% endif %}
       {% endfor %}
      </select>
   </p>
    <p>
        <button type="submit" class="btn">提交</button>
    </p>

</form>

  </body>
</html>

10.sendemail.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/css/layui.css">

    <script src="{% static 'jquery-3.3.1.js' %}"></script>
</head>
<body>
<form action="" method="post">
    {% csrf_token %}
<div class="form-group">

    <div class="layui-input-block" style="text-align: center">
        <h1>注册界面</h1><br><br>
        用户名:<input type="text" name="username" value=""><br><br>
        密码:<input type="text" name="password" value=""><br><br>
        <label for="exampleInputName2">邮箱地址</label>
        <input type="text" class="form-control" id="email" name="email" placeholder="请输入电子邮箱"/><br><br>
        邮箱验证码:<input type="text" name="yzm" value=""><br><br>
    </div>
    <div class="layui-input-block" style="text-align: center">
        <input type="button" id="btn" value="发送验证码" onclick="settime(this);send()"/><br><br>
        <input type="submit" value="注册">
    </div>
</div>
</form>

<script type="text/javascript">
    function send() {
        console.log('re')
        $.ajax({
            url: "http://127.0.0.1:8000/app01/sendemail/",
            type: "GET",
            data: "email=" + $("#email").val(),
            success: function (msg) {
                alert("发送邮件了");
            }
        });
    }
    var countdown = 10;
    function settime(val) {
        if (countdown == 0) {
            val.removeAttribute("disabled");
            val.value = "免费获取验证码";
            countdown = 10;
            return;
        } else {
            val.setAttribute("disabled", true);
            val.value = "重新发送(" + countdown + ")";
            countdown--;
        }
        setTimeout(function () {
            settime(val)
        }, 1000)
    }

</script>
</body>
</html>

11.login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/css/layui.css">
    <script src="/static/layui.js" charset="utf-8"></script>
</head>
<body>
<ul class="layui-nav" lay-filter="">
  <li class="layui-nav-item"><a href="">最新活动</a></li>
  <li class="layui-nav-item "><a href="">产品</a></li>
  <li class="layui-nav-item"><a href="">大数据</a></li>
  <li class="layui-nav-item">
    <a href="javascript:;">解决方案</a>
    <dl class="layui-nav-child"> <!-- 二级菜单 -->
      <dd><a href="">移动模块</a></dd>
      <dd><a href="">后台模版</a></dd>
      <dd><a href="">电商平台</a></dd>
    </dl>
  </li>
  <li class="layui-nav-item"><a href="">社区</a></li>

</ul>
    <div class="layui-form-item">
        <label class="layui-form-label" >密码框</label>

        <div class="layui-input-inline">
            <input type="password" name="password" required lay-verify="required" placeholder="请输入密码" autocomplete="off" class="layui-input">

        </div>

        <div class="layui-form-mid layui-word-aux">辅助文字</div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label">选择框</label>

        <div class="layui-input-block">
            <select name="city" lay-verify="required">
                <option value=""></option>
                <option value="0">北京</option>
                <option value="1">上海</option>
                <option value="2">广州</option>
                <option value="3">深圳</option>
                <option value="4">江西</option>
            </select>

        </div>
    </div>
        <div>
            <button style="background:blue;border-radius: 50%;width: 150px;height: 150px">提交</button>
        </div>
    <div id="demo0"></div>
<script>
    layui.use(['laypage','layer'],function (){
        var laypage=layui.laypage
        ,layer=layui.layer;
        laypage.render({
            elem:'demo0'
            ,count:data.length
            ,first:'首页'
            ,last:'尾页'
            ,theme:'#ff5722'

        });

    });
</script>
<script src="/static/layui.js" charset="utf-8"></script>
{{ time |date:"Y-m-d:H:i:s" }}
<script src="/static/jquery-3.3.1.js"></script>
<script>
    alert("hello world.");
</script>

</body>
</html>

12.index.html

{#<!DOCTYPE html>#}
{#<html lang="en">#}
{#<head>#}
{#    <meta charset="UTF-8">#}
{#    <title>Title</title>#}
{#</head>#}
{#<body>#}
{#<form action="/app01/sendemail/" method="POST">#}
{#    {% csrf_token%}#}
{#    <button type="submit">邮件</button>#}
{#</form>#}
{#</body>#}
{#</html>#}



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <link rel="stylesheet" href="/static/css/layui.css">
</head>
<body>
    <div>
        <fieldset class="layui-elem-field layui-field-title" style="margin-top: 100px;">
            <legend style="text-align: center"><h1 style="color: aqua " >欢迎来到知识的海洋馆</h1></legend>
        </fieldset>
        <hr class="layui-border-orange">

    </div>
    <div style="text-align: center"><button  class="layui-border-red" style="border-radius: 50%;width: 300px;height: 300px"><a style="color:pink"  href="/app01/register/"><h2>请开始注册吧</h2></a></button></div>
    <div style="text-align: center"><button class="layui-border-blue"  style=" border-radius: 50%;width: 300px;height: 300px"><a style="color:red" href="/app01/login/">请开始登录吧</a></button></div>
</body>
</html>

五、settings展示

"""
Django settings for bookproject project.

Generated by 'django-admin startproject' using Django 3.0.3.

For more information on this file, see
https://docs.djangoproject.com/en/3.0/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.0/ref/settings/
"""

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import redis

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '_i&8!ot$4yc1-yiul$uow_b$hxznq6*2(-+ibuv_y&zf6gt)63'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'bookproject.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'bookproject.wsgi.application'


# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "bookshop",
        'USER': "root",
        'PASSWORD':'000000',
        'HOST': '',
        'PORT':3306

    }
}

EMAIL_HOST = 'smtp.qq.com'
# 设置端口号,为数字   使用SSL,端口号465或587
EMAIL_PORT = 25
#设置发件人邮箱
EMAIL_HOST_USER = '@qq.com'
# 设置发件人 授权码
EMAIL_HOST_PASSWORD = ''
EMAIL_FROM = "@qq.cofm"
#nctsmpktpsmseafc
#gynbopmewexcdhid
# 设置是否启用安全链接
EMAIL_USER_TLS = True


# Password validation
# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/

LANGUAGE_CODE = 'zh-Hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False



# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/

STATIC_URL = '/static/'

STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]


REDIS_CON = redis.StrictRedis(host = 'localhost',port = 6379)


  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值