Django之图书管理系统

Django之图书管理系统

一、创建项目文件夹
选择位置创建文件夹,在cmd中输入以下命令创建项目

django-admin startproject bookproject

点击创建的文件夹后再次cmd输入:

python manage.py startapp app01

在这里插入图片描述

二、打开python软件,配置
1、settings(其他配置跟以往相同)只需添加以下代码

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "bookshop",#数据名
        "USER":"root",#用户名
        "PASSWORD":"root",
        "HOST":"",#域名
        "PORT":"3306",#端口号
    }
}

注:配置完成后手动添加文件夹static和template

2.配置models

#创建出版社对象
class Publisher(models.Model):
    id = models.AutoField(primary_key = True)
    name = models.CharField(max_length=64,null=False)
    address = models.CharField(max_length=64,null=False)


#创建图书
class Book(models.Model):
    id = models.AutoField(primary_key=True)
    name = 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')

三、迁移数据库并写入数据库,启动项目

python manage.py makemigrations
python manage.py migrate
python manage.py runserver

四、创建路由

from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
    #path('admin/', admin.site.urls),
    #添加出版社路由
    path('add_publisher/',views.add_publisher),
    # 出版社路由列表
    path('publisher_list/',views.publisher_list),
    # 修改出版社路由
    path('edit_publisher/',views.edit_publisher),
    # 图书列表路由
    path('book_list/',views.book_list),
    # 添加图书路由
    path('add_book/',views.add_book),
    # 修改路由
    path('edit_book/',views.edit_book),
    # 删除图书路由
    path('delete_book/',views.delete_book),
    # 删除出版社路由
    path('delete_publisher/',views.delete_publisher),
    # 作者列表路由
    path('author_list/',views.author_list),
    # 添加作者路由
    path('add_author/',views.add_author),
    # 修改作者路由
    path('edit_author/',views.edit_author),
    # 删除作者路由
    path('delete_author/',views.delete_author),
]

在这里插入图片描述

五、新建HTML页
在这里插入图片描述
六、写入views视图代码
首先导入redirect和models 模块
1.出版社

from django.shortcuts import render, redirect
from app01 import models


# Create your views here.

#添加出版社
def add_publisher(request):
    if request.method == "POST":
        # 获取表单提交的内容
        publisher_name = request.POST.get('name')
        publisher_address = request.POST.get('address')
        # 保存数据库表单中
        models.Publisher.objects.create(name=publisher_name, address=publisher_address).save()
        return redirect('/app01/publisher_list/')
    return render(request, 'add_publisher.html')




# 删除出版社
def delete_publisher(request):
    # 获取删除图书的ID
    id = request.GET.get('id')
    # 根据ID删除数据库中的记录
    models.Publisher.objects.filter(id=id).delete()
    return redirect('/app01/publisher_list/')

#出版社列表
def publisher_list(request):
    # get
    # 查询数据库中所有信息
    publisher_list = models.Publisher.objects.all()
    return render(request, 'publisher_list.html', locals())

#修改出版社
def edit_publisher(request):
    if request.method == 'POST':
        # 获取表单提交过来的内容
        id = request.POST.get('id')
        name = request.POST.get('name')
        address = request.POST.get('address')
        # 根据ID去数据库中查找对象
        publisher_obj = models.Publisher.objects.get(id=id)
        # 修改
        publisher_obj.name = name
        publisher_obj.address = address
        publisher_obj.save()
        return redirect('/app01/publisher_list/')
    else:
        # 获取ID
        id = request.GET.get('id')
        # 去数据库中查找相应的数据
        publisher_obj = models.Publisher.objects.get(id=id)
        publisher_obj_list = models.Publisher.objects.all()
        # 3返回页面
        return render(request, 'edit_publisher.html',
                      {"publisher_obj": publisher_obj, "publisher_obj_list": publisher_obj_list})

在这里插入图片描述
![添加(https://img-blog.csdnimg.cn/20210413143704864.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81NDgxMjI1Mg==,size_16,color_FFFFFF,t_70)
添加成功

2、图书

# 图书列表
def book_list(request):
    # 获取图书信息
    book_obj_list = models.Book.objects.all()
    print(book_obj_list)
    # 将数据放到页面上
    return render(request, 'book_list.html', {"book_obj_list": book_obj_list})

#添加图书
def add_book(request):
    if request.method == 'POST':
        # 获取表单提交过来的内容
        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')
        print(publisher_id)
        # 保存到数据库app01book
        models.Book.objects.create(name=name, price=price, inventory=inventory, sale_num=sale_num,
                                   publisher_id=publisher_id).save()
        # 重定向到图书列表页面
        return redirect('/app01/book_list/')
    else:
        # 获取所有出版社
        publisher_obj_list = models.Publisher.objects.all()
        return render(request, 'add_book.html', {"publisher_obj_list": publisher_obj_list})
# 修改图书
def edit_book(request):
    if request.method == 'GET':

        # 获取ID
        id = request.GET.get('id')
        # 去数据库中查找相应的数据
        book_obj = models.Book.objects.filter(id=id).first()
        # 查找所有出版社
        publisher_list = models.Publisher.objects.all()
        # 返回页面
        return render(request, 'edit_book.html',
                      {'book_obj': book_obj, 'publisher_list': publisher_list})
    else:
        # 获取表单提交过来的内容
        id = request.POST.get('id')
        name = request.POST.get('name')
        inventory = request.POST.get('inventory')
        sale_num = request.POST.get('sale_num')
        price = request.POST.get('price')
        publisher_id = request.POST.get('publisher_id')
        # 查询数据库并进行更新
        models.Book.objects.filter(id=id).update(name=name, price=price, inventory=inventory, sale_num=sale_num,
                                                 publisher_id=publisher_id)
        # 定向到book_list中
        return redirect('/app01/book_list/')

# 删除图书
def delete_book(request):
    # 获取ID
    id = request.GET.get('id')
    # 删除图书
    models.Book.objects.filter(id=id).delete()
    # 重定向到图书列表
    return redirect('/app01/book_list/')

# 删除图书管理
def delete_publisher(request):
    # 获取删除图书的ID
    id = request.GET.get('id')
    # 根据ID删除数据库中的列表
    models.Publisher.objects.filter(id=id).delete()
    # 重定向
    return redirect('/app01/publisher_list')

在这里插入图片描述

3、作者

# 添加作者
def add_author(request):
    if request.method == 'GET':
        # 1获取所有的图书
        book_obj_list = models.Book.objects.all()
        # 2返回页面
        return render(request, 'add_author.html', {'book_obj_list': book_obj_list})
    else:
        # 1.获取表单提交过来的数据
        name = request.POST.get('name')
        book_ids = request.POST.getlist('books')
        # 2 保存数据库
        author_obj = models.Author.objects.create(name=name)  # 创建对象
        author_obj.book.set(book_ids)  # 设置关系
        # 3 重定向到列表页面
        return redirect('/app01/author_list/')

# 删除作者
def delete_author(request):
    # 获取id
    id = request.GET.get('id')
    # 删除作者
    models.Author.objects.filter(id=id).delete()
    # 重定向
    return redirect('/app01/author_list/')
# 修改作者
def edit_author(request):
    if request.method == 'GET':
        # 获取id
        id = request.GET.get('id')
        # 查询对象和所有的图书
        author_obj = models.Author.objects.get(id=id)
        book_obj_list = models.Book.objects.all()
        # 返回页面
        return render(request, 'edit_author.html',
                      {'author_obj': author_obj, 'book_obj_list': book_obj_list})
    else:
        # 保存修改的数据
        # 获取表单提交过来的内容
        id = request.POST.get('id')
        name = request.POST.get('name')
        book_ids = request.POST.getlist('books')
        # 根据id查找对象并修改
        author_obj = models.Author.objects.filter(id=id).first()
        author_obj.name = name
        author_obj.book.set(book_ids)
        author_obj.save()
        # 重定向到作者列表
        return redirect('/app01/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>
    <!--这是导航栏-->
    {% include "nav.html" %}
   <!--这是侧栏-->
   <div class="container-fluid">
        <div class="row">
        <div class="col-md-3">
            <ul class="nav nav-sidebar">
                {% block nav %}

                {% endblock %}
            </ul>
        </div>
  <!--标题栏-->
 {% block bar %}

 {% endblock %}
 <!--主程序-->
{% block main%}

{% endblock %}

  <!--这是页码-->
    <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>

(导航栏)

 <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="#" 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>

(1、图书列表)

{% extends "base.html" %}
{% block bar %}
    <div class="col-md-9" style="justify-content: flex-end;">
        <h1 class="page-header">出版社管理页面</h1>
        <div class="panel panel-primary">
            <div class="panel-heading">出版社列表 <i class="fa fa-thumb-tack pull-right"></i></div>
            <div class="panel-body">
                <div class="row" style="margin-bottom: 15px">
                    <div class="col-md-4">
                        <div class="input-group">
                            <input type="text" class="form-control" placeholder="Search for...">
                            <span class="input-group-btn">
                                <button class="btn btn-default" type="button">搜索</button>
                            </span>
                        </div>
                    </div>
                    <div class="col-md-2 pull-right">
                        <a class="btn btn-success" href="/app01/add_publisher">新增出版社</a>

                    </div>
                </div>
                </div>
{% endblock %}
{% block main%}
<table border="1" class="table table-hover table-bordered">
    <thead>
    <tr>
        <th>序号</th>
        <th>出版社</th>
        <th>名称</th>
        <th>地址</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
    {% for publisher_obj in publisher_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>
            <a href="/app01/delete_publisher/?id={{ publisher_obj.id }}">删除</a>
        </td>
</tr>
    {% endfor %}
</tbody>
</table>
{% endblock %}

(修改图书)

{% extends "base.html" %}
{% block bar %}
    <div class="col-md-9" style="justify-content:flex-end ">
            <h1 class="page-header">出版社管理页面</h1>
        <div class="panel panel-primary">
            <div class="panel-heading">修改出版社<i class="fa fa-thumb-tack pull-right"></i></div>
                <div class="panel-body">
                    <div class="row" style="margin-bottom: 15px">
                        <div class="col-md-4">
                                <div class="input-group">
                                </div> <!-
                            </div> <!- /input-group -- >
                            </div>
                    </div>
                    </div>
{% endblock %}
{% block main %}
    <form action="" method="post">
    <p>
        <input type="hidden" 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 }}">
    </p>
    <p>
        <button type="submit" class="btn">提交</button>
    </p>

    </form>
{% endblock %}

(添加图书)

{% extends "base.html" %}

{% block bar %}
    <div class="col-md-9" style="justify-content: flex-end;">
            <h1 class="page-header">出版社管理页</h1>
        <div class="panel panel-primary">
        <div class="panel-heading">添加出版社 <i class="fa fa-thumb-tack pull-right"></i></div>
            <div class="panel-body">
                <!-
            </div>
        </div>
 {% endblock %}

{% block main %}
<form action="" method="post">
    {% 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>
</body>
</html>
{% endblock %}

(2、添加作者)

{% extends "base.html" %}
{% block bar %}
    <div class="col-md-9" style="justify-content: flex-end;">
        <h1 class="page-header">作者管理页面</h1>
        <div class="panel panel-primary">
            <div class="panel-heading">添加作者 <i class="fa fa-thumb-tack pull-right"></i></div>
            <div class="panel-body">
                <div class="row" style="margin-bottom: 15px">
                    <div class="col-md-4">
                        <div class="input-group">
                        </div> <!-
                    </div>
                    </div>
            </div>
            </div>
{% endblock %}
{% block main %}
    <form action="" method="post">
        {% 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.id }}">{{ book_obj.name }}</option>
            {% endfor %}
        </select>
    </p>
    <p>
        <button type="submit" class="btn">提交</button>
    </p>
</form>
{% endblock %}

(修改作者)

{% extends "base.html" %}
{% block bar %}
    <div class="col-md-9" style="justify-content: flex-end;">
        <h1 class="page-header">作者管理页面</h1>
        <div class="panel panel-primary">
            <div class="panel-heading">编辑作者 <i class="fa fa-thumb-tack pull-right"></i></div>
            <div class="panel-body">
                <div class="row" style="margin-bottom: 15px">
                    <div class="col-md-4">
                        <div class="input-group">
                        </div>
                        <!-
                    </div>
            </div>
        </div>
    </div>
{% endblock %}


{% block main %}
    <form action="" method="post">
        {% csrf_token %}
        <p>
            <input type="hidden" name="id" value="{{ author_obj.id }}">
        </p>
        <p>
            作者 <input type="text" name="name" value="{{ author_obj.name }}">
        </p>
        <p>
            书名
                <select name="books" id="books">
                    {% for book_obj in book_obj_list %}
                         <option value="{{ book_obj.id }}">{{ book_obj.name }}</option>
                    {% endfor %}
        </select>
        </p>

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

    </form>
{% endblock %}

(3、添加图书)

{% extends "base.html" %}
{% block bar %}
    <div class="col-md-9" style="justify-content: flex-end;">
            <h1 class="page-header">图书管理页面</h1>
        <div class="panel panel-primary">

        <div class="panel-heading">添加图书 <i class="fa fa-thumb-tack pull-right"></i></div>
            <div class="panel-body">
                <!-
            </div>
        </div>
{% endblock %}
{% block main %}
    <form action="" method="post">
    {% csrf_token %}
    <p>
        图书名称 <input type="text" name="name">
    </p>
    <p>
        价格 <input type="text" name="price">
    </p>
    <p>
        库存 <input type="inventory" name="inventory">
    </p>
    <p>
        卖出数 <input type="sale_num" name="sale_num">
    </p>
    <p>
        出版社
        <select  multiple name="publisher_id" 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>
{% endblock %}

(修改图书)

{% extends "base.html" %}
{% block bar %}
    <div class="col-md-9" style="justify-content:flex-end ">
            <h1 class="page-header">出版社管理页面</h1>
        <div class="panel panel-primary">
            <div class="panel-heading">修改出版社<i class="fa fa-thumb-tack pull-right"></i></div>
                <div class="panel-body">
                    <div class="row" style="margin-bottom: 15px">
                        <div class="col-md-4">
                                <div class="input-group">
                                </div> <!-
                            </div> <!- /input-group -- >
                            </div>
                    </div>
                    </div>
{% endblock %}
{% block main %}
    <form action="" method="post">
    {% csrf_token %}
    <p>
        <input type="hidden" name="id"  value="{{ book_obj.id }}">
    </p>
    <p>
        图书名称 <input type="text" name="name" value="{{ book_obj.name }}">
    </p>
    <p>
        价格 <input type="text" name="price" value="{{ book_obj.price }}">
    </p>
    <p>
        库存 <input type="invevtory" name="inventory" value="{{ book_obj.inventory}}">
    </p>
    <p>
        卖出数 <input type="sale_num" name="sale_num"value="{{ book_obj.sale_num }}">
    </p>
    <p>
        出版社 <input type="text" name="publisher_id" value="{{ book_obj.publisher.id }}">
    </p>
    <p>
        <button type="submit" class="btn">提交</button>
    </p>
    </form>

{% endblock %}

(图书列表)

{% extends "base.html" %}
{% block bar %}
    <div class="col-md-9" style="justify-content: flex-end;">
        <h1 class="page-header">出版社管理页面</h1>
        <div class="panel panel-primary">
            <div class="panel-heading">出版社列表 <i class="fa fa-thumb-tack pull-right"></i></div>
            <div class="panel-body">
                <div class="row" style="margin-bottom: 15px">
                    <div class="col-md-4">
                        <div class="input-group">
                            <input type="text" class="form-control" placeholder="Search for...">
                            <span class="input-group-btn">
                                <button class="btn btn-default" type="button">搜索</button>
                            </span>
                        </div>
                    </div>
                    <div class="col-md-2 pull-right">
                        <a class="btn btn-success" href="/app01/add_publisher">新增出版社</a>

                    </div>
                </div>
                </div>
{% endblock %}
{% block main%}
    <div class="container-fluid">
    <div class="row-fluid">
         <div class="span12">
             <table border="1" 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>
                 </tr>
                 </thead>
                 <tbody>
                 {% for book_obj in book_obj_list %}
                     <tr>
                     <td>{{ forloop.counter }}</td>
                        <td>{{ book_obj.id }}</td>
                        <td>{{ book_obj.name }}</td>
                        <td>{{ book_obj.price }}</td>
                     <td>{{ book_obj.inventory }}</td>
                     <td>{{ book_obj.sale_num }}</td>
                        <td>{{ book_obj.publiser.name }}</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>
{% endblock %}

总结:创建django项目修改文件内容时需迁移数据库并写入数据库,定义变量注意调用准确,书写规范等。

  • 5
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值