我们先从功能上分析,看看这个博客网站需要建立哪些表,每个表中都需要什么字段。
首先,最主要的是我们的博客表,名字可以直接叫做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
关于博客表有以下几点需要注意的:
最后:
再次执行:
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。