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

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

一、模板继承


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


   标签block:用于在父模板中预留区域,留给子模板填充差异性的内容,名字不能相同。为了更好的可读性,建议给endblock标签协商名字,这个名字与对应的block名字相同。父模板中也可以使用上下文中传递过来的数据。


   父模板中:


   {% block名称%}

   预留区域,可以编写默认内容,也可以没有默认内容


   {% endblock名称%}


   模板继承:


   基于extends与block标签实现


   extends:指定要继承的模板的路径,一定要将此标签卸载子模板的第一行


   block:+指定能够用于继承的标签,父模板中需要用于继承的标签,要用block进行标记



案例一:模板继承


  • 先创建两个模板:One.html、Two.html

6148b4715b2b421c87a0f45071f4c3f1.png


在One.html中写上一些标签,然后清空Two.html中的内容,最后在Two.html的首行写上:{% extend ‘One.html’ %}({% extend ‘模板文件路径’ %})


ca64f8fa57614dab89dc2838740dd8b1.png


3a0d791d03d04dbc97a16178d633970c.png


运行程序,使用Two.html模板,即可看到Two.html继承了One.html模板

0c0481cf75654620a15c29ab07a47281.png


案例二:重写模板

  • 在所继承的模板中在想要修改模板的标签范围写上block标签,可根据标签名、id、class进行标记


480603940bc14d829774adbe1c721c6c.png


在Two.html中根据block标签重写


0f101b65dc224ec5b585ddb437e0af56.png


ae77baa8a8f0476cb88477f2023562b4.png




二、模型类和数据库


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

3f5f77a0cf21465ca5217f3b7254de07.png

  • 再输入生成数据库表的函数
  • python manage.py migrate


e81abdf74f8d419783051ca503970de0.png

在数据库中可看到表的生成

be2daf17b8f34061bd151bb2c577d034.png


步骤总结


1.在models.py文件中定义模型类


⒉数据库迁移: python manage.py makemigrations生成迁移文件,这一步执行之后是不会有数据库表的生成的


3.生成表: python manage.py migrate



模型类总结


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


2.模型类中一个属性对应数据库表中的一个字段



相关文章
|
8月前
|
SQL 存储 数据库
Django模型查询与性能调优:告别N+1问题
本文详解Django数据库查询基础与优化技巧,涵盖QuerySet使用、关联查询(一对多/多对多)、N+1查询问题及解决方案(select_related、prefetch_related)、高级查询方法及项目实战中的数据权限控制实现。
353 0
|
9月前
|
存储 数据库 Python
Django模型关系:从一对多到多对多全解析
本文详解Django模型关系:一对多(ForeignKey)及多对多(ManyToManyField)关系的定义、操作与优化技巧。同时探讨外键约束的使用场景与权衡策略。
568 0
|
9月前
|
存储 关系型数据库 MySQL
Django模型开发:模型字段、元数据与继承全方位讲解
本文将全面介绍 Django 模型的关键知识点,包括模型字段类型、映射、常用配置选项以及模型继承等高级特性,帮助开发者快速掌握模型设计与使用技巧。
312 0
|
关系型数据库 数据库 PostgreSQL
【赵渝强老师】PostgreSQL的模板数据库
在PostgreSQL中,创建新数据库时,默认通过拷贝`template1`实现。`template1`包含标准系统对象,可自定义以影响新数据库内容;而`template0`是纯净模板,仅含预定义对象且不应修改。视频讲解和代码示例展示了如何查看现有数据库信息及标识字段的作用。 ![图示](https://ucc.alicdn.com/pic/developer-ecology/yub6x2mlkqwck_398ed06397a44c2d9bfbb5ae5c90bbc0.png) [视频链接](https://www.bilibili.com/video/BV1szyfY4EQn)
215 0
【赵渝强老师】PostgreSQL的模板数据库
|
数据管理 数据库 数据安全/隐私保护
Django—同一项目不同app使用不同数据库
在Django项目中实现不同app使用不同数据库的配置,可以通过配置多数据库、创建数据库路由和配置路由来实现。通过这种方法,可以有效地将数据隔离到不同的数据库,提高数据管理的灵活性和系统的可扩展性。希望本文能为开发者在Django项目中使用多数据库提供清晰的指导。
442 4
|
机器学习/深度学习 前端开发 网络架构
Django如何调用机器学习模型进行预测
Django如何调用机器学习模型进行预测
401 5
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
837 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
存储 开发框架 JSON
【查漏补缺】Django模型字段类型及其应用
【查漏补缺】Django模型字段类型及其应用
247 0
|
7月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
500 158
|
7月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。