【Django】图书管理

本文详细介绍了如何使用Django框架创建一个图书管理项目,包括创建项目、应用,配置MySQL数据库,数据迁移,创建模型,添加记录,设计模板页面,设置路由和视图函数,最终实现项目的启动和测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实现步骤

(一)创建Django项目 - books

  • 创建Django项目,设置项目位置与项目名

 

(二)创建并注册应用 - index

1、创建index应用

  • 在项目配置文件里,导入os模块

 在控制台执行python manage.py startapp index

 启动项目,访问http://127.0.0.1:8000(点击run运行)

2、注册index应用

  • 在配置文件的INSTALLED_APPS列表里添加index应用

(三)创建数据库 - books

  • 在Navicat里创建MySQL数据库 - books

 

(四)配置MySQL数据库连接信息

  • 在settings.py文件里配置MySQL数据库连接信息

注意:PASSWORD里面写自己设置的密码

 

(五)设置MySQL数据库连接模块

  • 在books的__init__.py文件里设置数据库连接模块

  • 如果导入pymysql语句报错,那么在控制台执行pip install pymysql安装pymysql模块

(六)实现数据迁移生成表

  • 依次执行下述两条命令
  • 1.生成迁移文件
  • python manage.py makemigrations

  • 2.同步到数据库中

  • python manage.py migrate

  • 如果出现以下情况

     那就是兼容性出现了问题

  • 可以尝试用以下方法(将标出的一段复制到百度)

  •  代码如下(放在--init--.py文件内):

    import pymysql
    pymysql.version_info = (1, 4, 13, "final", 0)
    pymysql.install_as_MySQLdb() 

    即可查看生成的数据

    (七)创建模型

    1、创建图书模型 - Book

  • 在index的models.py文件里定义Book模型类

 2、创建用户模型 - User

from django.db import models

# Create your models here.
# 创建图书模型
class Book(models.Model):
    id = models.AutoField(primary_key=True)
    number = models.CharField('总编号', max_length=10)
    category = models.CharField('分类号', max_length=10)
    name = models.CharField('书名', max_length=50)
    author = models.CharField('作者', max_length=10)
    press = models.CharField('出版单位', max_length=50)
    price = models.DecimalField('单价', decimal_places=2, max_digits=6)

    def __str__(self):
        return str(self.name)

# 创建用户模型
class User(models.Model):
    id = models.AutoField(primary_key=True)
    username = models.CharField('用户名', max_length=20)
    password = models.CharField('密码', max_length=50)
    last_login_time = models.DateTimeField('上次登录时间!')

    def __str__(self):
        return str(self.username)

(八)数据迁移,生成图书表与用户表

  • 依次执行下面两条命令
  • 1.python manage.py makemigrations
  • 2.python manage.py migrate index 0001_initial  或  (python manage.py migrate)

 

 查看生成的图书表与用户表

 

 

(九)给图书表与用户表添加记录

1、给图书表添加记录

  • 执行SQL查询,插入表记录
  • INSERT INTO `index_book` VALUES (1, '445501', 'TP3/12', '数据库导论', '王文丹', '科学出版社', 17.90);
    INSERT INTO `index_book` VALUES (2, '445502', 'TP3/12', '数据库导论', '王文丹', '科学出版社', 17.90);
    INSERT INTO `index_book` VALUES (3, '445503', 'TP3/12', '数据库导论', '王文丹', '科学出版社', 17.90);
    INSERT INTO `index_book` VALUES (4, '445505', 'TW2/12', '电工基础', '楚留香', '机械工业出版社', 32.00);
    INSERT INTO `index_book` VALUES (5, '332211', 'TP5/10', '计算机基础', '李伟', '高等教育出版社', 18.00);
    INSERT INTO `index_book` VALUES (6, '112266', 'TP3/12', '安卓开发实践', '张慧明', '电子工业出版社', 55.00);
    INSERT INTO `index_book` VALUES (7, '225544', 'TP7/21', '高等数学', '李小刚', '高等教育出版社', 25.00);
    INSERT INTO `index_book` VALUES (8, '225533', 'TP7/12', '线性代数入门', '秦厚荣', '北京大学出版社', 25.00);
    INSERT INTO `index_book` VALUES (9, '113388', 'TR7/90', '大学英语', '杨琼', '北京外国语大学出版社', 30.00);
    INSERT INTO `index_book` VALUES (10, '446601', 'TR4/13', 'Java程序设计', '张凯文', '工信集团出版社', 40.00);
    INSERT INTO `index_book` VALUES (11, '446602', 'TR4/13', 'Java程序设计', '张凯文', '工信集团出版社', 40.00);
    INSERT INTO `index_book` VALUES (12, '446603', 'TR4/13', 'Java程序设计', '张凯文', '工信集团出版社', 40.00);
    INSERT INTO `index_book` VALUES (13, '449901', 'TR4/15', 'Spring Boot实践', '秦文举', '清华大学出版社', 50.00);
    INSERT INTO `index_book` VALUES (14, '449902', 'TR4/15', 'Spring Boot实践', '秦文举', '清华大学出版社', 50.00);
    INSERT INTO `index_book` VALUES (15, '118801', 'TR4/25', '计算机网络', '唐玉玲', '高等教育出版社', 32.00);
    INSERT INTO `index_book` VALUES (16, '118802', 'TR4/25', '计算机网络', '唐玉玲', '高等教育出版社', 32.00);
    

 查看图书表

2、给用户表添加记录

  • 执行SQL查询,添加表记录
  • INSERT INTO `index_user` VALUES (1, 'admin', '123456', '2021-05-05 11:14:29');
    INSERT INTO `index_user` VALUES (2, '李晓红', '111111', '2021-05-21 11:14:58');
    INSERT INTO `index_user` VALUES (3, '唐玉刚', '222222', '2021-05-10 11:15:42');
    

 查看用户表

(十)创建模板页面

1、创建登录页面 - login.html

  • 在templates文件夹里创建login.html
  • <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>用户登录</title>
    </head>
    <body>
    <h3 style="text-align: center">用户登录</h3>
    <form id="frmLogin" action="do_login" method="post">
        {% csrf_token %}
        <table align="center" class="tb" border="1" cellpadding="10" >
            <tr>
                <td align="center">账号</td>
                <td><input id="username" type="text" name="username"/></td>
            </tr>
            <tr>
                <td align="center">密码</td>
                <td><input id="password" type="password" name="password"/></td>
            </tr>
            <tr align="center">
                <td colspan="2">
                    <input type="submit" value="登录"/>
                    <input type="reset" value="重置"/>
                </td>
            </tr>
        </table>
        <script language="JavaScript">
            login_msg={{ data | safe }}
            if(login_msg!=null){
                alert(login_msg);
            }
        </script>
    </form>
    </body>
    </html>

2、创建图书显示页面 - books.html

  • 在templates文件夹里创建books.html
  • <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>显示图书信息</title>
    </head>
    <body>
        <h3>显示图书信息</h3>
        <table border="1" cellpadding="3">
            <tr>
                <th>序号</th>
                <th>总编号</th>
                <th>分类号</th>
                <th>书名</th>
                <th>作者</th>
                <th>出版单位</th>
                <th>单价</th>
            </tr>
            {% for book in books %}
                <tr>
                    <td width="50" align="center">{{ book.id }}</td>
                    <td width="100" align="center">{{ book.number }}</td>
                    <td width="100" align="center">{{ book.category }}</td>
                    <td width="300" align="center">{{ book.name }}</td>
                    <td width="100" align="center">{{ book.author }}</td>
                    <td width="300" align="center">{{ book.press }}</td>
                    <td width="100" align="center">{{ book.price }}</td>
                </tr>
            {% endfor %}
        </table>
    </body>
    </html>

(十一)设置路由

1、创建子路由

  • 在index目录里创建子路由urls.py,在里面创建子路由集合urlpatterns
  • from django.urls import path
    urlpatterns=[
        path('login',loginView,name='login'),
        path('do_login',dologinView,name='do_login'),
        path('books',booksView,name='books'),
    ]

  • 三个视图函数都需要在index的views.py里创建,目前还没有创建,所以会报错,待会儿创建视图函数后,导入一下就可解决这个问题。

2、设置主路由

  • 在主路由集合里添加一个路由:path('', include(('index.urls', 'index'), namespace='index'))

(十二)创建视图函数

1、创建跳转到登录页面的视图函数 - loginView

  • 在index的views.py里创建loginView视图函数
  • 2、创建显示图书的视图函数 - booksView

  • 在index的views.py里创建booksView视图函数

3、创建处理登录请求的视图函数 - doLoginView

  • 在index的views.py里创建doLoginView视图函数
  • import json
    from django.shortcuts import render,redirect
    
    # Create your views here.
    from index.models import Book,User
    
    #创建登录视图函数
    def loginView(request):
        return render(request,'logoin.html')
    
    #创建处理登录请求的视图函数
    def doLoginView(request):
        if request.method=='POST':
            username=request.POST.get('username')
            password=request.POST.get('password')
    
            user=User.objects.raw('select * from index_user where username = %s and password =%s',params=[username,password])
            if len(user)>0:
                return redirect('../books')
            else:
                login_msg=['用户名或密码错误']
                return render(request,'logoin.html',{'data':json.dumps(login_msg)})
    #创建显示视图函数
    def booksView(request):
        books=Book.objects.all()
        return render(request,'books.html',locals())

4、解决子路由中视图函数的导入问题

  • 导入index.views里的三个视图函数
  • from django.urls import path
    from index.views import loginView,doLoginView,booksView
    urlpatterns=[
        path('login',loginView,name='login'),
        path('do_login',doLoginView,name='do_login'),
        path('books',booksView,name='books'),
    ]

(十三)启动项目,测试效果

  • 访问http://127.0.0.1:8000/login,显示登录页面

 输入错误的用户名或密码

 单击【登录】按钮,弹出消息框提示用户

 单击【确定按钮】,重新回到登录页面,输入正确的用户名和密码

 单击【登录】按钮,表格显示全部图书信息

添加增删改查按钮

 

 编写一个为增加图书的add.html页面

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        h1{
                        text-align: center;
        }
        table{
            margin: 20px auto;
            border: 1px cornflowerblue solid;
            width: 400px;
            height: 300px;

        }
        td{
            text-align: center;
        }

        span{
            font-size: 15px;
        }
        input{
            width: 100px;
        }
        .ip{
            padding-right: 30px;
        }
        .ip1{
            padding-right: 10px;
        }
        .ip2{
            width: 50px;
            height: 50px;
            border-radius: 15px;
            border: none;
            font-size: 20px;
            background: aqua;
            color:red;
        }
        .ip3{
            width: 50px;
            height: 50px;
            border-radius: 15px;
            border: none;
            font-size: 20px;
            color: aqua;
            background:red;
        }
    </style>
</head>
<body>
<table>
    <h1>添加书籍信息</h1>
     <form id="frmLogin" action="add" method="post">

    <tr><td class="ip1"><span>总编号:</span><input name="number" type="text"></td></tr>
    <tr><td class="ip1"><span>分类号:</span><input name="category" type="text"></td></tr>
    <tr><td><span>书名:</span><input name="name" type="text"></td></tr>
    <tr><td><span>作者:</span><input name="author" type="text"></td></tr>
    <tr><td class="ip"><span>出版单位:</span><input name="press" type="text"></td></tr>
    <tr><td><span>单价:</span><input name="price" type="text"></td></tr>
    <tr><td><input value="提交" type="submit" class="ip2">&nbsp;&nbsp;<input value="重置" type="reset" class="ip3"></td></tr>
    </form>
</table>

</body>
</html>

 

 编写一个为增加图书的show.html页面

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>修改主页面</title>
    <style type="text/css">
        .cont{
            width: 100%;
            height: 400px;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            border: 1px red solid;
            position: relative;
        }
        .cont div{
            margin-top: 10px;
        }
        .cont span{
            font-size: 20px;
            margin-right: 10px;
        }
        .cont input{
            width: 250px;
            height: 45px;
            border-radius: 15px;
            text-align: center;
        }
        .cont_bu input{
            width: 80px;
            margin-left: 45%;
            cursor: pointer;
        }
        .cont_bu input:hover{
            background-color: palegreen;
            color: #FF00FF;
        }
        .cont_di{
            position: absolute;
            top: 200px;
            left: 200px;
            font-size: 25px;
            color:mediumspringgreen;
        }
        .
    </style>
</head>
<body>
<div class="cont">
            <div>
                <h1>修改学生数据</h1>
            </div>
        <form action="{% url 'upday' %}" method="post" >
            <div>
                <span>姓名:</span><input name="name" type="text" placeholder="请输入书名进行修改">
            </div>
            <div>
                <span>学号:</span><input name="number" type="text" placeholder="请输入修改总编号">
            </div>
            <div>
                <span>班级:</span><input name="category" type="text"  placeholder="请输入修改你分类号">
            </div>
            <div>
                <span>性别:</span><input name="author" type="text" placeholder="请输入修改作者">
            </div>
            <div>
                <span>性别:</span><input name="press" type="text" placeholder="请输入修改出版社">
            </div>
            <div>
            </div>
            <div class="cont_bu">
                <input value="提交" type="submit">
            </div>
        </form>
</div>

</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值