一、MTV模式

Django框架主要关注的是模型(Model)、模板(Template)和视图(Views),称为MTV模式。

它们各自的作用如下:

层次

作用

模型(Model),即数据存取层

处理与数据相关的所有事物:如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。

模板(Template),即业务逻辑层

处理与表现相关的决定:如何在页面或其他类文档中进行显示。

视图(View),即表现层

存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。

简单来说,Model存取数据、View决定需要调取哪些数据、Template负责将调取出的数据以合理的方式展现出来。


二、数据库与模型

数据库是存储电子文件的场所,出错独立的数据集合。一个数据库由多个数据表构成。

默认情况下,数据库就是my_blog\db.sqlite3这个文件

操作数据库使用的是复杂的SQL语句,在Django里写Web应用并不需要你直接去操作数据库,而是定义好模型,模型中包含了操作数据库所必要的命令。也就是说我们只需要定义数据模型,其它的底层代码都不用关心,它们会自动从模型生成。


三、编写Model.py

Django中通过模型(Model)映射到数据库,处理与数据相关的事务。
对博客网站来说,最重要的数据就是文章。所以首先来建立一个存放文章的数据模型。

打开article\models.py,输入如下代码

Django搭建个人博客--编写博客文章的Model模型_数据


代码解释:

  • 每个模型都被表示为​​django.db.models.Model​​类的子类,从它继承了操作数据库需要的所有方法。
  • 每个字段都是​​Field​​​类的实例。比如字符字段被表示为​​CharField​​​,日期时间字段被表示为​​DateTimeField​​。这将告诉Django要处理的数据类型。
  • 定义某些​​Field​​​类的实例需要参数。例如​​CharField​​​需要一个​​max_length​​参数。这个参数的用处不止用于定义数据库结构,也用于验证数据。
  • 使用​​ForeignKey​​​定义一个关系。这将告诉Django,每个(或多个)​​ArticlePost​​​对象都关联到一个​​User​​对象。

Django具有一个简单的账号系统(User),满足一般网站的用户相关的基本功能。

​ArticlePost​​​类定义了一篇文章所具备的要素:作者、标题、正文、创建时间以及更新时间。
我们还可以额外再定义一些内容,规范​​​ArticlePost​​中数据的行为:

Django搭建个人博客--编写博客文章的Model模型_数据_02

  • 内部类​​Meta​​​中的​​ordering​​​定义了数据的排列方式。​​-created​​​表示将以创建时间的倒序排列,保证了最新的文章总是在网页的最上方。注意​​ordering​​是元组,括号中只含一个元素时不要忘记末尾的逗号。
  • ​__str__​​​方法定义了需要表示数据时应该显示的名称。给模型添加​​__str__​​方法是很重要的,它最常见的就是在Django管理后台中作为对象的显示值。因此应该总是返回一个友好易读的字符串。
  • 元数据是“任何不是字段的东西”,例如排序选项​​ordering​​​、数据库表名​​db_table​​​、单数和复数名称​​verbose_name​​​和​​verbose_name_plural​​。这些信息不是某篇文章私有的数据,而是整张表的共同行为。

四、数据迁移(Migrations)

编写好Model后,接下来就需要进行数据迁移。迁移是Django对模型所做的更改传递到数据库中的方式。

注意:每当对数据库进行了更改(添加、修改、删除等)操作,都需要进行数据迁移

Django的迁移代码是由模型文件自动生成的,它本质上只是个历史记录,Django可以用它来进行数据库的滚动更新,通过这种方式使其能够和当前的模型匹配。

在虚拟环境下,进入my_blog,输入​python manage.py makemigrations​,对模型的更改创建新的迁移表:

python manage.py makemigrations

Django搭建个人博客--编写博客文章的Model模型_django_03


通过运行​​makemigrations​​命令,Django会检测对模型的修改,并把修改的部分储存为一次迁移。

然后输入python manage.py migrate,应用迁移到数据库中

python manage.py migrate

Django搭建个人博客--编写博客文章的Model模型_数据库_04


​migrate​​命令选中还没有执行过的迁移并应用在数据库上,也就是将模型的更改同步到数据库结构上。迁移是非常强大的功能,它能让你在开发过程中持续的改变数据库结构而不需要重新删除和创建表。它专注于是数据库平滑升级而不会丢失数据。

注意:每当修改了​​models.py​​​文件,都需要用​​migrations​​​和​​migrate​​这两条指令迁移数据。

在迁移之后,Model的编写就算完成了。