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



相关文章
|
2月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
132 6
|
2月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
73 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
2月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
69 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
3月前
|
前端开发 IDE 数据库连接
ThinkPHP6 模型层的模型属性,表映射关系,以及如何在控制层中使用模型层和模型层中的简单CRUD
本文详细介绍了ThinkPHP6中模型层的使用,包括模型属性设置、表映射关系、以及如何在控制层中使用模型层进行CRUD操作。
ThinkPHP6 模型层的模型属性,表映射关系,以及如何在控制层中使用模型层和模型层中的简单CRUD
|
3月前
|
SQL 关系型数据库 MySQL
php学习笔记-连接操作mysq数据库(基础)-day08
本文介绍了PHP中连接操作MySQL数据库的常用函数,包括连接服务器、设置字符集、关闭连接、选择数据库、结果集释放、获取影响行数以及遍历结果集等操作。通过书籍查询的实例演示了如何使用这些函数进行数据库操作,并提供了一个PHP操纵MySQL数据库的模板。
php学习笔记-连接操作mysq数据库(基础)-day08
|
2月前
|
SQL Go 数据库
【速存】深入理解Django ORM:编写高效的数据库查询
【速存】深入理解Django ORM:编写高效的数据库查询
61 0
|
3月前
|
数据库 Python
django中数据库外键可以自定义名称吗
django中数据库外键可以自定义名称吗
|
3月前
|
Java C++ Python
django 模板 过滤器
django 模板 过滤器
|
3月前
|
前端开发 数据库 开发者
数据模型(数据库表设计)生成代码
BizWorks ToolKit 插件集成 Mybatis-Plus 代码生成工具,支持从数据库表批量生成代码,简化开发流程。本文详细介绍配置方法及项目示例,包括配置文件格式、生成选项及具体操作步骤,帮助开发者快速实现代码同步更新。配置文件 `.mp.yaml` 支持自定义输出目录、生成组件等,适用于多种项目结构。
50 0
|
4月前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
135 0