微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【Django学习笔记 - 11】:模板的继承、模型类和数据库

一、模板继承

目的:模板继承和类的继承含义是一样的,主要是为了提高代码重用,减轻开发人员的工作量。

标签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、Postgresqlsqlite

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类型。

实现步骤

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' # 设置表的名字

步骤总结

1.在models.py文件中定义模型类
数据库迁移: python manage.py makemigrations生成迁移文件,这一步执行之后是不会有数据库表的生成
3.生成表: python manage.py migrate

模型类总结

1.一个模型类对应一张数据库表(认情况下会有一个自增的字段id,主键)
2.模型类中一个属性对应数据库表中的一个字段

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐