设计博客数据方案

即定义博客的数据模型,这里模型表示为一个python类,并且继承自django.db.models.Model,其中的每个属性视为一个数据库字段。

Django对每个模型(类)创建一个表,当创建一个模型时,Django提供了一个实用的API,从而可方便地查询数据库中的对象。

这里我们定义一个Post模型,代码如下:

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

class Post(models.Model):
    STATUS_CHOICES = (
        ('draft', 'Draft'),
        ('published', 'Published'),
    )
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250,
                            unique_for_date='publish')
    author = models.ForeignKey(User,
                              on_delete=models.CASCADE,
                              related_name='blog_posts')
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10,
                              choices=STATUS_CHOICES,
                              default='draft')

    class Meta:
        ordering = ('-publish',)

    def __str__(self):
        return self.title
  • title表示为帖子标题
  • slug字段用于URL中。作为一种简短的标记,slug仅包含字母/数字/下划线及连字符。之前曾向该字段添加了unique_for_date参数,进而可采用发布日期和slug对帖子构建URL.
  • author字段表示为一个外键,并定义了多对一的关系。
  • body表示帖子的主体
  • publish表示帖子的发布日期,此处使用了Django的时区now方法作为默认值,并以时区格式返回当前日期。我们可将其视为Python标准方法datetime.now的时区版本。
  • created表示帖子的创建时间。此处采用了auto_now_add,当创建某个对象时,日期将被自动更新。
  • updated表示帖子最后一次更新的时间。此处采用了auto_now,当保存某个对象时,日期被自动更新。
  • status表示帖子的状态。由于使用了choices参数,因而该字段值仅设置为既定方案中的某一个方案,也就是最前面定义的STATUS_CHOICES参数

Django中包含了不同的字段类型,并以此定义定义模型。可以访问https://docs.djangoproject.com/en/3.0/ref/models/fields/以查看所有的字段类型。

模型内的Meta类包含了元数据。在默认状态下,当查询元数据时,将通知Django对publish字段中的结果以降序排序(通过负号前缀,可指定降序排序)。据此,最新发布的帖子将首先被显示。

__str__()方法为默认的人们可读的对象表达方式,Django将在多处对其加以使用,加管理站点。

一、激活应用程序

编辑settings.py文件,并向INSTALLED_APPS设置中添加blog.apps.BlogConfig,如下所示:

二、设置并使用迁移方案

1.首先针对Post模型创建初始迁移,生成了一个0001_initial.py文件,可以打开此文件查看迁移结果。

python manage.py makemigrations blog

2.接下来将数据库与新模型同步

python manage.py migrate

此外,我们可以通过下面命令,来查看Django在数据库中执行的SQL代码内容。sqlmigrate命令将使用到迁移名称并在不执行SQL语句的情况下返回其SQL。

python manage.py sqlmigrate blog 0001

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享