写在前面
Django 框架主要关注的是模型(Model)、模板(Template)和视图(Views),称为MTV模式。
它们各自的职责如下:
层次 | 职责 |
---|---|
模型(Model),即数据存取层 | 处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。 |
模板(Template),即业务逻辑层 | 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。 |
– | – |
视图(View),即表现层 | 存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。 |
简单来说就是Model存取数据,View决定需要调取哪些数据,而Template则负责将调取出的数据以合理的方式展现出来。
数据库与模型
是存储电子文件的场所,储存独立的数据集合。一个由多个构成。
啥意思个栗子,三年级二班中同学们的花名册就是。有的花名册记录每位同学的考试成绩、有的记录身高体重、还有的记录兴趣爱好…所有的这些花名册都放在老师的柜子里,这个柜子就是“”了。
默认情况下,数据库就是这个文件了。在 站上线后你可能想换别的数据库,不过目前我们还不需要讨论这个内容。
操作数据库使用的是复杂的SQL语句,它是完全不同于Python的另一种语言,这对新手来说无疑是困难的。
幸运的是,在 Django 里写Web应用并不需要你直接去操作数据库,而是定义好(用Python语法就可以了!),中包含了操作数据库所必要的命令。也就是说你只需要定义数据模型,其它的底层代码都不用关心,它们会自动从模型生成。
其实它有专门的术语,叫(
),用于实现面向对象编程语言里不同类型系统的数据之间的转换。
编写Model.py
如前面所讲,Django中通过模型(Model)映射到数据库,处理与数据相关的事务。
对博客 站来说,最重要的数据就是文章。所以首先来建立一个存放文章的数据模型。
打开文件,输入如下代码:
代码非常直白。
- 每个模型都被表示为 类的子类,从它继承了操作数据库需要的所有方法。
- 每个字段都是 类的实例 。比如字符字段被表示为 ,日期时间字段被表示为
。这将告诉Django要处理的数据类型。 - 定义某些 类实例需要参数。例如 需要一个
参数。这个参数的用处不止于用来定义数据库结构,也用于验证数据。 - 使用 定义一个关系。这将告诉 ,每个(或多个) 对象都关联到一个 对象。
Django具有一个简单的账 系统(User),满足一般 站的用户相关的基本功能。
我们还可以额外再定义一些内容,规范中数据的行为:
- 内部类中的定义了数据的排列方式。-created表示将以创建时间的倒序排列,保证了最新的文章总是在 页的最上方。注意是元组,括 中只含一个元素时不要忘记末尾的逗 。
- 方法定义了需要表示数据时应该显示的名称。给模型增加 方法是很重要的,它最常见的就是在Django管理后台中做为对象的显示值。因此应该总是返回一个友好易读的字符串。
整理并去掉注释,全部代码放在一起是这样:
恭喜你,你已经完成了博客 站最核心的数据模型的大部分内容。
代码不到20行,是不是完全没啥感觉。后面会慢慢体会Django的强大。
抄还是敲/h2>
学习本教程时,代码部分直接拷贝还是纯手敲/p>
直接拷贝的优点是学得很快,理解原理后,把代码往自己项目中刷刷刷拷贝过去,几下就能运行了。但这要求学习者有较强的自律能力:什么程度才能算已经“理解”了/p>
纯手敲就避免了这个问题,想快也快不起来,还经常遇到bug,在解决的过程中纠正自身的习惯性问题。但是手敲的好处必须保证你敲的时候大脑没有放空。
博主的建议是:
- 模型、视图代码量不多,又是重点学习内容,尽量纯手敲。
- 模板根据个人情况,适当拷贝。
视图、模板马上就会讲到。
代码分解
这部分内容不能理解也没关系,先跳过,待水平提高再回过头来阅读。
导入
框架基于语言,而在中用或者来导入模块。
模块其实就一些函数和类的集合文件,它能实现一些相应的功能。当我们需要使用这些功能的时候,直接把相应的模块导入到我们的程序中就可以使用了。
用于导入整个功能模块。但实际使用时往往只需要用模块中的某一个功能,为此导入整个模块有点大材小用,因此可以用表示从模块中导入给我用就可以了。
类
作为面向对象编程语言,最重要的概念就是类和实例。
类是抽象的模板,而实例是根据这个类创建出来的一个个具体的“对象”。每个对象都拥有相同的方法,但各自的数据可能不同。而这些方法被打包封装在一起,就组成了类。
比如说我们刚写的这个类,作用就是就为博客文章的内容提供了一个模板。每当有一篇新文章生成的时候,都要比对类来创建…等等数据;虽然每篇文章的具体内容可能不一样,但是必须都遵循相同的规则。
在中,数据由模型来处理,而模型的载体就是类。
字段
字段表示数据库表的一个抽象类,使用字段类创建数据库表,并将类型映射到数据库。
在模型中,字段被实例化为类属性并表示特定的表,同时具有将字段值映射到数据库的属性及方法。
比方说类中有一个的属性,这个属性中保存着类型的数据:即一个较短的字符串。
外键
数据库中有各种各样的数据表,有时候几张表的数据是互相关联的。比如一张表记录了所有的文章,另一张表记录了所有的用户,而文章是用户发表的,这时候这两张表就产生了关系。外键就是用来表示这种关系的。
而是用来解决“一对多”关系的。那什么又叫“一对多”/p>
又比如一个班级的同学中,每个同学只能有一种性别,而每种性别可以对应很多的同学,这也是“一对多”。
既然有“一对多”,当然也有“一对一”、“多对多”。目前用不到这些外键,后面再回头来对比其差别。
之前的版本外键的参数可以不填;以后是必填项。
内部类
内部类提供模型的元数据。元数据是“任何不是字段的东西”,例如排序选项ordering、数据库表名、单数和复数名称和 。这些信息不是某篇文章私有的数据,而是整张表的共同行为。
要不要写内部类是完全可选的,当然有了它可以帮助理解并规范类的行为。
在中我们使用的元数据,表明了每当我需要取出文章列表,作为博客首页时,按照(即文章创建时间,负 标识倒序)来排列,保证了最新文章永远在最顶部位置。
数据迁移(Migrations)
编写好了后,接下来就需要进行数据迁移。迁移是对模型所做的更改传递到数据库中的方式。
注意,每当对数据库进行了更改(添加、修改、删除等)操作,都需要进行数据迁移。
Django的迁移代码是由模型文件自动生成的,它本质上只是个历史记录,可以用它来进行数据库的滚动更新,通过这种方式使其能够和当前的模型匹配。
在虚拟环境中进入文件夹(还没熟悉venv的再温习: 在Windows中搭建Django的开发环境),输入,对模型的更改创建新的迁移表:
通过运行 命令, 会检测你对模型文件的修改,并且把修改的部分储存为一次迁移。
然后输入,应用迁移到数据库中:
命令选中所有还没有执行过的迁移并应用在数据库上,也就是将模型的更改同步到数据库结构上。迁移是非常强大的功能,它能让你在开发过程中持续的改变数据库结构而不需要重新删除和创建表。它专注于使数据库平滑升级而不会丢失数据。
有点拗口,也有点枯燥,坚持。乐趣在后面。
再重复一次:每当你修改了文件,都需要用和这两条指令迁移数据。
在迁移之后,的编写就算完成了。
总结
本章初步了解了的模式,编写了博客文章的模型,并将其迁移到了数据库中。
下一步就向进军,学习如何调取模型中的数据。
文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树Web应用开发 Django212338 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!