一、模板继承
目的:模板继承和类的继承含义是一样的,主要是为了提高代码重用,减轻开发人员的工作量。
标签block:用于在父模板中预留区域,留给子模板填充差异性的内容,名字不能相同。为了更好的可读性,建议给endblock标签协商名字,这个名字与对应的block名字相同。父模板中也可以使用上下文中传递过来的数据。
父模板中:
{% block名称%}
预留区域,可以编写默认内容,也可以没有默认内容
{% endblock名称%}
模板继承:
基于extends与block标签实现
extends:指定要继承的模板的路径,一定要将此标签卸载子模板的第一行
block:+指定能够用于继承的标签,父模板中需要用于继承的标签,要用block进行标记
案例一:模板继承
- 先创建两个模板:One.html、Two.html
在One.html中写上一些标签,然后清空Two.html中的内容,最后在Two.html的首行写上:{% extend ‘One.html’ %}({% extend ‘模板文件路径’ %})
运行程序,使用Two.html模板,即可看到Two.html继承了One.html模板
案例二:重写模板
- 在所继承的模板中在想要修改模板的标签范围写上block标签,可根据标签名、id、class进行标记
在Two.html中根据block标签重写
二、模型类和数据库
ORM
ORM,全称object Relational Mapping,中文叫做对象关系映射,通过ORM我们可以通过类的方式去操作数据库,而不用再写原生的SQL语句。通过把表映射成类,把行作为实例,把字段作为属性,ORM在执行对象操作的时候最终还是会把对应的操作转换为数据库原生语句。
针对应用程序的数据操作,直接编写原生sql语句会存在两方面的问题,严重影响开发效率,如下
1.SQL语句的执行效率问题,应用开发人员需要耗费大部分精力去优化
sql(语句)。
2.数据库迁移问题,例如:针对wmysq(开发的sql语句无法在ovacle数据
库上,一旦需要迁移数据库,便还需要考虑跨平台问题。
ORM的优点
1.易用性:使用ORM做数据库的开发可以有效的减少重复SQL语句的概率,写出来的模型也更加直观、清晰。
2.性能损耗小:ORM转换成底层数据库操作指令确实会有一些开销。但从实际的情况来看,这种性能损耗很少(不足5%),只要不是对性能有严苛的要求,综合考虑开发效率、代码的阅读性,带来的好处是远远大于性能损耗,而且项目越大作用越明显。
3.设计灵活:可以轻松的写出复杂的查询。
4.可移植性:Django封装了底层的数据库实现,支持多个关系数据库引擎,包括流行的MySQL、PostgreSQL和SQLite
ORM的作用
1.用于实现面向对象编程语言里不同类型的数据之间的转换。
2.ORM在业务逻辑层和数据库层之间充当了桥梁的作用。
3.ORM是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。
4.不需要直接面向数据库编程而是定义模型类,通过模型类和对象完成数据表的增删改查操作。
ORM的解析流程
1.ORM会将Python代码转成为SQL语句。
2.SQL语句通过pymysql传送到数据库服务端。
3.在数据库中执行SQL语句并将结果返回。
常用字段
1. AutoField
IntegerField的改进形式,字段值根据已有的id自动增长,常用作主键。一般情况下Django是为我们自动创建好了主键的。
2. CharField
用于保存不太长的字符串。使用该字段必须给出字段参数max_length,该属性指定了CharField所能接收的最大字符数,也有用于字段有效性验证。
3. BooleanField
字段值只包含True和False。类似于SQL Server中的bit类型。
4. DateField
日期类型,对应python中的datetime.date类型。
实现步骤
- 先设置数据库连接,然后在models.py文件中写上Python代码
from django.db import models # Create your models here. class Have(models.Model): sport = models.CharField(verbose_name='运动', max_length=10) # CharField表示以字符串的形式存储于数据库 # 在CharField之中,必须要有max_length read = models.CharField(verbose_name='读书', max_length=10) age = models.IntegerField(verbose_name='年龄') like = models.CharField(verbose_name='喜欢', max_length=10) class Meta: db_table = 'Have' # 设置表的名字
- 在Terminal中输入数据库迁移函数:
- python manage.py makemigrations
- 再输入生成数据库表的函数
- python manage.py migrate
在数据库中可看到表的生成
步骤总结
1.在models.py文件中定义模型类
⒉数据库迁移: python manage.py makemigrations生成迁移文件,这一步执行之后是不会有数据库表的生成的
3.生成表: python manage.py migrate
模型类总结
1.一个模型类对应一张数据库表(默认情况下会有一个自增的字段id,主键)
2.模型类中一个属性对应数据库表中的一个字段