一、实现步骤
(一)创建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"> <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>