MTV
我们或许都听说过MVC模式。MVC是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码。Django也有其设计模式,我们称之为MTV。
- M 代表模型(Model) , 即数据存取层。 该层处理与数据相关的所有事务
- T 代表模板(Template), 即表现层。 比如HTML
- V 代表视图(View) , 即业务逻辑层。 我们编写业务代码的地方。
Django模型
在运行我们第一个项目的时候,并没有涉及数据库的操作,如果我们想创建一张表,那么如何操作呢?我们可以在article/models.py下面进行操作。可能有的同学会说,models.py不是一个python文件吗?跟数据库有什么关系,因为Django的特殊性,所以我们可以使用对象关系映射(ORM,Object Relational Mapping),简单的说就是用操作类的形式操作数据库,那么怎么操作呢?我们使用blog进行举例,假设blog有一张表,有标题、作者、文章内容、发布时间组成,那么我们如何在Django下面生成一张数据表呢?我们打开article/models.py文件,输入如下代码:
from django.db import models
# Create your models here.
class Article(models.Model):
title = models.CharField(max_length=10, ) # 标题
author = models.CharField(max_length=10) # 作者
content = models.CharField(max_length=500) # 内容
我们创建一个Article类,继承models.Model,定义四个字段:title、 author、 content date_publish,CharField、DateTimeField是字段的类型,除了这两种,Django还有很多其它数据类型, 如下表:
类型 | 描述 |
---|---|
AutoField | 用于存放 integer 类型的数字。 |
BooleanField | 用于存放布尔类型的数据(Ture 或 False) |
CharField | 用于存放字符型的数据, 需要指定长度 max_length。 |
CommaSeparatedIntegerField | 用于存放用逗号隔开的 integer 类型的数据。 |
DateField | 日期型, 必须是“YYYY-MM-DD” 格式 |
DateTimeField | 日期时间型, 必须是"YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] "格式。 |
DecimalField | 小数型, 用于存放小数的数字。 |
EmailField | 电子邮件类型 |
FilePathField | 文件路径类类型, FilePathFields must have either 'allow_files' or 'allow_folders set to True. |
FloatField | 浮点型。 用于存放浮点型数据。 |
IntegerField | 用于存放 integer 类型的数字。 |
BigIntegerField | 用于存放大 integer 类型的数字, 最大数支持: 9223372036854775807 |
GenericIPAddressField | 存放 IP 地址的类型, IPv4 和 IPv6 地址, 字符串格式。 |
NullBooleanField | vlaue must be either None, True or False. |
PositiveIntegerField | Positive integer |
PositiveSmallIntegerField | Positive small integer |
SlugField | 需要定义 max_length 值。 |
SmallIntegerField | Small integer |
TextField | 用于存放文本类型的数据。 |
TimeField | 时间类型。 "HH:MM[:ss[.uuuuuu]]" 格式 |
URLField | 用于存放 URL 地址 |
BinaryField | Raw binary data |
但现在article还只是一个类,不是一张表,所以我们要执行下面2个命令,执行数据库迁移
F:\新建文件夹\blog>python manage.py makemigrations article
Migrations for 'article':
article\migrations\0001_initial.py
- Create model Article
F:\新建文件夹\blog>python manage.py migrate
Operations to perform:
Apply all migrations: admin, article, auth, contenttypes, sessions
Running migrations:
No migrations to apply.
python manage.py makemigrations article
相当于 在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py, 但是这个改动还没有作用到数据库文件python manage.py migrate
将该改动作用到数据库文件,比如产生table之类。