赞
踩
完成图书-英雄信息的维护,需要存贮两种数据:图书、英雄
要求如下
这里需要用到ORM
ORM(object relation mapping)对象关系映射,帮助我们对数据库进行增删改查。不需要我们用sql语言进行管理,只需要简单的操作。
1、在models模块这里可以设置添加数据表
只要其父辈是models.Model,则会生成对应的数据库结构
2、在主应用的设置文件里面添加bookapp子文件,这样可以读取到子应用的信息
3、生成迁移脚本,进行迁移
注意在migrations里面有__init__.py文件才能被迁移脚本搜索到
生成迁移脚本
进行迁移
4、可以在数据库查看到bookapp下面的book类的数据库
5、目前功能正常,继续完善我们数据表格
内容说明:
(1)、一个类就是一个数据表格,对应的表名称为bookapp_类名称
(2)、属性对应数据表的网名,默认会添加id这一列
(3)、一对多关系(一本书,可能对应多个英雄)
from django.db import models
# Create your models here.
class Book(models.Model):
name = models.CharField(max_length=40, verbose_name="书名")
pub_date = models.DateField(verbose_name="出版日期")
class Hero(models.Model):
gender_choice = [
(1, "男")
(2, "女")
]
name = models.CharField(max_length=20, verbose_name="人物名称")
gender = models.IntegerField(choices=gender_choice, verbose_name="性别") #进行性别选择
content = models.TextField(max_length=100,verbose_name="人物描述")
book_id = models.ForeignKey('Book', on_delete=models.SET_NULL,null=True,verbose_name="书籍id") #外键关联,删除书籍时,相关的hero设置为空
6、进行数据迁移
完成后可以看到我们建立的数据库
安装一个ipython,更友好的补齐工具
进入python的shell窗口
导入需要更改的数据库
目前数据都为空
方式1
数据库表中的一条记录对应OOP的一个object
In [6]: from bookapp.models import Book,Hero
In [7]: b1=Book()
In [8]: b1.name="西游记"
In [10]: from datetime import date
In [11]: d1 = date(2022,7,7)
In [12]: b1.pub_date=d1
In [15]: b1.save() #执行存储
In [16]: Book.objects.all()
此时能看到有存储信息,但是看不到名字
添加代码可以返还字符串
这下可以看到内容
方式2
In [1]: from bookapp.models import Book,Hero
In [4]: from datetime import date
In [5]: b2=Book(name="红楼梦",pub_date=date(1999,1,1))
In [6]: b2.save()
此时可以看到增加的数据
1、根据名字搜索
如果按照这种方式搜索,得到的是结果的集合
因为对应的书籍只有一本,加上first(),就可以从集合里面拿出第一本
刚才的b1已经定位到了红楼梦那本书,现在可以直接删除b1
In [11]: from datetime import date
In [12]: book=Book(name="倚天屠龙记",pub_date=date(2000,1,1))
In [13]: book.save()
In [14]: hero1=Hero(name="张无忌",gender=1,content="info...")
In [15]: hero1.save()
In [38]: Hero.objects.all()
Out[38]: <QuerySet [<Hero: 张无忌>]>
In [39]: Book.objects.all()
Out[39]: <QuerySet [<Book: 红楼梦>, <Book: 倚天屠龙记>]>
In [40]: hero1.book_id
此时,hero1对应张无忌这个英雄,book对应倚天屠龙记这本书,hero1并没有对应键值对。
进行绑定
In [45]: hero1.book_id=book
In [52]: hero1.book_id
In [53]: hero1.book_id.id
可以查看到英雄对应的书籍和其绑定的id
1、添加数据到后台管理
将刚刚注册到数据库里面的
可以登录admin,将书籍管理加入到后台管理站点
可以查看到我们的书籍
2、修改中文
可以将Books和Heros表名更改为中文
可以看到已经修改为了中文
3、添加模块
1)#输出id,名字和出版日期。
2)#添加赛选日期功能
3)#搜索名字功能
4)#分页信息
新加几个图书,方便测试。
之前的图书如下
5)#添加链接
6)#可以添加选填和必填信息
之前
现在有了选填和必填信息
7)#添加关联信息
效果
、效果
效果
效果:
点击图片或者文字就回跳转
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1"> #table代表表格,border代表标签
<tr> #tr代表行
<td>主机名</td> #td代表列
<td>IP</td>
</tr>
<tr>
<td>localhost</td>
<td>127.0.0.1</td>
</tr>
<tr>
<td>server1</td>
<td>127.0.0.1</td>
</tr>
</table>
</body>
</html>
效果
表示换行
效果
创建样本目录下的html文件
将上下文的context{‘books’:‘book’}填充到index.html代码(此过程叫渲染)
效果
设置用户展示界面
效果
同上,增加英雄模块方面的详情页,可以通过输入书籍id,搜索到书籍信息
定义detail函数,将数据库的值传给租用的detail.html文件
书写detail.html文件,定义输出画面
效果如下
效果
点击后会自动跳转
流程图
1、浏览器请求
2、request封装后交给django框架进行处理
3、路由配置文件(可以从主到子配置文件)
4、执行视图函数
1)第一种返还方式
试图函数处理,直接返还
2)第二种返还方式
传递信息给模板(template)里面的html进行渲染
返还给用户
3)第三中返还方式
利用model.py对数据库里面的内容进行操作,返还给视图函数
试图函数将变量传给模板(template)里面的html进行渲染
返还给用户
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。