【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.模型类中一个属性对应数据库表中的一个字段



相关文章
|
3月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
168 6
|
1月前
|
SQL 定位技术 数据库
深入探索Django ORM:高效数据库操作的秘诀####
本文旨在为读者揭开Django ORM(对象关系映射)的神秘面纱,通过一系列生动的比喻和详实的案例,深入浅出地讲解其核心概念、工作原理及高级特性。我们将一起探讨如何利用Django ORM简化数据库交互,提升开发效率,同时确保数据的一致性和安全性。不同于传统的技术文档,本文将以故事化的形式,带领读者在轻松愉快的氛围中掌握Django ORM的精髓。 ####
|
3月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
90 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
3月前
|
机器学习/深度学习 前端开发 网络架构
Django如何调用机器学习模型进行预测
Django如何调用机器学习模型进行预测
97 5
|
3月前
|
机器学习/深度学习 监控 数据挖掘
基于Django和百度飞桨模型的情感识别Web系统
基于Django和百度飞桨模型的情感识别Web系统
63 5
|
3月前
|
机器学习/深度学习 算法 搜索推荐
django调用矩阵分解推荐算法模型做推荐系统
django调用矩阵分解推荐算法模型做推荐系统
55 4
|
3月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
124 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
3月前
|
存储 开发框架 JSON
【查漏补缺】Django模型字段类型及其应用
【查漏补缺】Django模型字段类型及其应用
34 0
|
3月前
|
SQL Go 数据库
【速存】深入理解Django ORM:编写高效的数据库查询
【速存】深入理解Django ORM:编写高效的数据库查询
109 0
|
4月前
|
数据库 Python
django中数据库外键可以自定义名称吗
django中数据库外键可以自定义名称吗

热门文章

最新文章