图书管理网站的制作详解(个人学习django框架的笔记)
第01号笔记最终成果图:
当前笔记所完成的网站的功能简介:
1 网页从数据库获得图书名称
2 点击新增按钮后增加一本书,当前名为“流星蝴蝶剑”
3 点击新增后当前页面url地址不变
该图书管理网站以下简称“网站”,网站主要功能有:
1:显示所含图书书名,显示每个图书出版日期,浏览量,评论量。
2:点击图书名可进入图书详情页:显示书内主要角色信息(姓名,性别,备注(也就是小说人物的招牌招式技能等))
项目制作环境:
Windows10 企业版
python3.7
Mysql5.7.28
Django库
Pycharm
1.设计模型类并生成表
1.设计BookInfo,增加属性bread和bcomment,另外设置软删除标记属性isDelete。
在图片所示的test2/booktest/models.py文件中添加如下代码(设置图书、英雄模型类)
添加图书模型类↓
from django.db import models
# 一类 对应下面多类
class BookInfo(models.Model):
'''图书模型类'''
#图书名称
btitle = models.CharField(max_length=20) #字符串类型
#出版日期
bpub_data = models.DateField() #日期类型
#阅读量
bread = models.IntegerField(default = 0) #整数类型,default是默认值
#评论量
bcomment = models.IntegerField(default = 0) #整数类型,default是默认值
# 删除标记
isDelete = models.BooleanField(default = False)
2.设计HeroInfo类型,增加软删除标记属性isDelete。
软删除标记:删除数据时不做真正的删除,而是把标记数据设置为1表示删除,目的是防止重要的数据丢失。
添加书中英雄模型类↓
class HeroInfo(models.Model):
'''英雄模型类'''
# 英雄名
hname = models.CharField(max_length = 20)
# 性别
hgender = models.BooleanField(default = False) #默认代表男
# 备注(技能,绝学)
hcomment = models.CharField(max_length = 200)
# 关联属性--用来关联 其属于某一类
hbook = models.ForeignKey(BookInfo)
# 删除标记
isDelete = models.BooleanField(default=False)
此时创建完两个类后要执行迁移文件。
操作:ctrl+R 输入cmd掉出命令行,切换到当前项目根文件(D:\pyStudy\djpro1\test2)中,输入python manage.py makemigrations按回车显示如下图:
●可见成功生成迁移文件<0001_initial.py>。
●此时可见migrations文件夹下也多了一个文件<0001_initial.py>。
此时迁移文件生成完毕
此时另外启动一个cmd调到当前文件夹下,输入mysql -u root -p —>输入密码 ----> 输入show databases; ---->输入 use bj18;(此时的bj18是需要提前设置好的数据库) ---->输入show tables;检查的当前连接数据库的模板(如下图):
此时再在cmd中输入:desc booktest_bookinfo; 来查看booktest目录下bookinfo的结构(如下图)
同样操作检查booktest下heroinfo结构(如下图):
但是此时数据库是空的,就需要添加一些数据。
以下数据是博主已经编辑好的,复制到打开数据库的cmd中就可以直接添加。
insert into booktest_bookinfo(btitle,bpub_data,bread,bcomment,isDelete) values
(‘射雕英雄传’,‘1980-5-1’,12,34,0),
(‘天龙八部’,‘1986-7-24’,36,40,0),
(‘笑傲江湖’,‘1995-12-24’,20,80,0),
(‘雪山飞狐’,‘1987-11-11’,58,24,0);
insert into booktest_heroinfo(hname,hgender,hbook_id,hcomment,isDelete) values
(‘郭靖’,1,1,‘降龙十八掌’,0),
(‘黄蓉’,0,1,‘打狗棍法’,0),
(‘黄药师’,1,1,‘弹指神通’,0),
(‘欧阳锋’,1,1,‘蛤蟆功’,0),
(‘梅超风’,0,1,‘九阴白骨爪’,0),
(‘乔峰’,1,2,‘降龙十八掌’,0),
(‘段誉’,1,2,‘六脉神剑’,0),
(‘王语嫣’,0,2,‘神仙姐姐’,0),
(‘令狐冲’,1,3,‘独孤九剑’,0),
(‘任盈盈’,0,3,‘弹琴’,0),
(‘东方不败’,0,3,‘葵花宝典’,0),
(‘胡斐’,1,4,‘胡家刀法’,0),
(‘苗若兰’,0,4,‘黄衣’,0),
(‘程灵素’,0,4,‘医术’,0),
(‘袁紫衣’,0,4,‘六合拳’,0);
如图可见已经保存成功↓
此时在负责数据库的cmd中输入select * from booktest_bookinfo; 查看此时数据库内的图书信息。同理,输入select * from booktest_heroinfo; 查看此时数据库内的英雄信息
添加数据完成后,就可以执行启动服务器了,在cmd中输入 python manage.py runserver 回车
接下来需要编辑url了
2.编写视图函数并配置URL
(1)图书信息展示页:
a.设计url,用过浏览器访问 http://127.0.0.1:8000/index 时候显示图书信息页面。首先打开booktest下的views.py文件输入如下图所示代码*
b.设计url对应的视图函数Index:查询出所有图书的信息,然后将这些信息传递给模板文件。
然后在test2目录新建名为templates的文件夹
此时打开test2/test2/settings.py文件设置模板目录
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d4c025c1455e72f2440cb87af230b005.png)
接下来在刚才新建的templates文件夹下新建名为booktest的文件夹
再在新建的booktest文件夹下新建名为index的HTML文件
打开test2/booktest/views.py文件添加如下代码
打开test2/urls.py添加如下图代码后,将url.py文件粘贴到booktest文件夹下
编辑粘贴过来的urls.py文件
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ce381719f404018db83ada24a47a0e9b.png)
c.编写模板文件index.html:遍历显示出每一本图书的信息并添加新建和删除超链接。
此时在templates/booktest/index.html文件中编写如下代码![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/583dabaf8e3006f1fb5ec9dfd9d0ad0b.png)
然后打开网页输入http://127.0.0.1:8000/index显示如图![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/fe64f3804a2a68bc123a46f6dfb750c6.png)
2.图书信息新增
点击“新增”按钮后显示所以此时需要构建视图:
打开test2/booktest/migrations/views.py输入如下代码:
def create(request):
'''新增一本图书'''
# 1.创建BookInfo对象
b = BookInfo()
b.btitle = '流星蝴蝶剑'
b.bpub_data = date(1990,1,1)
# 2.保存到数据库里
b.save()
# 3.返回应答,让浏览器在访问/index,重定向
return HttpResponse('ok')
3.创建模板文件
然后点开同级目录下的urls.py文件并输入
url(r'^create$', views.create) #新增一本图书
此时再进入网页http://127.0.0.1:8000/create可看到运行成功
接下来要用到重定向
重定向(Redirect):就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。
打开views.py文件,导入django.http包中的HttpResponseRedrect模块,然后在create方法中修改返回值(如下图)
该操作的目的可以称之为页面重定向
也就是使服务器不返回页面,而是告诉浏览器再去申请其他的url地址。
然后返回网页,多次点击“新增”页面后可发现链接仍然是"http://127.0.0.1:8000/index"