基于Django的Blog(三)编写模型Model

1. Django模型

Django框架主要关注的是Model,Template,Views称为MTV模式

层次 职责
模型(Model),即数据存取层 处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
模板(Template),即业务逻辑层 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。
视图(View),即表现层 存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。

2. 数据库模型

定义好模型,自动生成

2.1 编写Models.py

article/models.py

from django.db import models
# 导入内建的User模型
from django.contrib.auth.models import User
# timezone 用户处理时间相关事务
from django.utils import timezone

# 博客文章数据模型
class ArticlePost(models.Model):
    # 文章作者. 参数on_delete 用于指定数据删除的方式
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    
    # 文章标题 models.CharField 为字符串字段, 用于保存较短的字符串, 比如标题
    title = models.CharField(max_length=100)
    
    # 文章正文 保存大量文本使用TextField
    body = models.TextField()
    
    # 文章创建时间 参数 default=timezone.now 指定其在创建数据时将默认写入当前时间
    created = models.DateTimeField(default=timezone.now)
    
    # 文章更新时间 参数 auto_now=True 指定每次数据更新时自动写入当前时间
    updated = models.DateTimeField(auto_now=True)
  • 每个模型都是django.db.models.Model的子类,从它继承了操作数据库需要的所有方法

  • 每个字段都是Field类的实例 比如字符串字段贝表示为CharField,日期时间字段DateTimeField.这将告诉Django要处理的数据类型

  • 定义某些field类实例需要参数.例如CharField需要一个max_length参数.这个参数的用处不至于用来定义数据库结构,也用于验证数据

  • 使用ForeignKey定义一个关系,这将告诉Django,每个ArticlePost对象都关联到一个User对象

    记住一对多关系 relationship是一(指的是class,而不是里面的字段 比如User类为一 而此处的ArticlePost类表示多,一个User类对应多个ArticlePost)

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

ArticlePost类定义了一篇文章所必须具备的要素:作者、标题、正文、创建时间以及更新时间。

我们还可以额外再定义一些内容,规范ArticlePost中数据的行为:

class ArticlePost(models.Model):
    ...
    # 内部类 class Meta 用于给model定义元数据
    class Meta:
        # ordering 指定模型返回的数据的排列顺序
        # '-created' 表明数据应该以倒序排列
        ordering = ('-created',)

    # 函数 __str__ 定义当调用对象的str() 方法时返回值的内容
    def __str__(self):
        # return self.title 将文章标题返回
        return self.title
  • 内部类Meta中的ordering定义了数据的排列方式.-created表示将以创建时间的倒序排列,保证了最新的文章总是在最上方.注意ordering是元组, 括号中只含一个元素时不要忘记末尾的逗号
  • __str__方法定义了需要表示数据时应该显示的名称.给模型增加__str__方法是很重要的,它最常见的就是在Django管理后台中作为对象的显示值.因此应该总是返回一个友好易读的字符串

3. 数据迁移 Migrations

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

(venv) E:\project\DjangoProject\dj_blog>
cd my_blog

(venv) E:\project\DjangoProject\dj_blog\my_blog>
python manage.py makemigrations
Migrations for 'article':
  article\migrations\0001_initial.py
    - Create model ArticlePost



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

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

(venv) E:\project\DjangoProject\dj_blog\my_blog>
python manage.py migrate

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

再重复一次:每当你修改了models.py文件,都需要用makemigrationsmigrate这两条指令迁移数据。

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

posted on 2020-07-05 20:50  sunnywillow  阅读(48)  评论(0)    收藏  举报