Django开发个人博客网站——6、博客网站数据库的设计

我们先从功能上分析,看看这个博客网站需要建立哪些表,每个表中都需要什么字段。

首先,最主要的是我们的博客表,名字可以直接叫做Blog,这个表中,肯定要包括以下几点:博客的标题、博客的内容、博客的发表时间、博客的修改时间、博客的分类、博客的点击量。当然,一般情况下还要有博客的作者,因为我们整个网站都是只有我们自己一个人,也就是不包含其它用户,因此作者这里就可以不写了。针对博客的分类,我们可以参考csdn博客系统,一篇博客只能有一个分类,但是可以有多个标签,比如我现在写的这篇博客,可以分类到django 下,但是它可以有多个标签:django、博客、数据库、开发……

考虑到每一篇博客都只能有一个分类,而一个分类下是可以包含很多博客的,因此分类与博客是一对多的关系,此时应当使用外键来进行关联。而一篇博客可以有多个标签, 每个标签也可以包含多个博客,因此,标签与博客是多对多的关系。关于一对多与多对多的知识话题,这里就不再展开了,不熟悉的同学可以查看django文档与相关资料。

因此,通过上述分析,我们可以确定出三个数据表,博客(Blog)、分类(Category)与标签(Tag)。下面在myblog目录下的models.py中创建这三个表,由于Blog表包含外键与多对多关系,因此首先应当建立另外两个表:

分类(Category)表的创建:

class Category(models.Model):
    """
    文章分类
    """
    name = models.CharField(verbose_name='文章类别', max_length=20)

    class Meta:
        verbose_name = '文章类别'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

这里我们只需要包含一个字段name就行了。

标签(Tag)的创建:

class Tag(models.Model):
    """
    文章标签
    """
    name = models.CharField(verbose_name='文章标签', max_length=20)

    class Meta:
        verbose_name = '文章标签'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

博客(Blog)表的创建:

from django.utils import timezone

class Blog(models.Model):
    """
    博客
    """
    title = models.CharField(verbose_name='标题', max_length=100)
    content = models.TextField(verbose_name='正文', default='')
    create_time = models.DateTimeField(verbose_name='创建时间', default=timezone.now)
    modify_time = models.DateTimeField(verbose_name='修改时间', auto_now=True)
    click_nums = models.IntegerField(verbose_name='点击量', default=0)
    category = models.ForeignKey(Category, verbose_name='文章类别')
    tag = models.ManyToManyField(Tag, verbose_name='文章标签')

    class Meta:
        verbose_name = '我的博客'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.title

关于博客表有以下几点需要注意的:

  • 标题应当限定长度,我们设定最大值为100
  • 内容不用限定长度,因此用的是TextField字段
  • 创建时间按理说应该是不能修改的,应该设定成auto_now_add=True,这样在添加对象时,时间是默认成现在的,且不能修改,可以说你在后台就看不到它。但因为我们现在是开发环境,之后还要从后台添加数据进行测试,如果时间都一样的话,很多功能体现不出来,因此现在设定成可以更改的样式,真正部署时,建议改成auto_now_add=True。
  • 修改时间直接设定成,auto_now=True,在你修改时,会自动变成当前时间。
  • 关于ForeignKey与ManyToManyField,请自行查看相关文档资料

最后:
再次执行:

makemigrations

migrate

即可将新建的这三个表添加到我们的数据库myblog中:

auth_group, 
auth_group_permissions,
auth_permission,
auth_user_groups,
auth_user_user_permissions, 
django_admin_log, 
django_content_type, 
django_migrations, 
django_session, 
myblog_blog,     #新增的博客表
myblog_blog_tag, #这个是博客与标签的多对多关系表
myblog_category, #新增的分类表
myblog_tag       #新增的标签表

需要说明的是,这里我们只给出了最开始设计时考虑到的情况,在后续开发过程中,可以随时对其进行变更。当多数据表信息变动时,要执行makemigrations 与 migrate 这样才能使改动生效。

——————————————————————————————————————————

项目的完整代码:django_blog
觉得有用的欢迎给个star。

你可能感兴趣的:(django)