Django个人博客开发五 | 数据库结构设计

2020年3月15日 18:25 阅读 2.37k 评论 0

功能分析

对于初学者数据库设计是建站比较难的点,数据库表的产生是有网站功能决定的,但是不能有一个功能就创建一张表吧,所以我们在敲代码之前需要先设计数据的结构

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

首先,最主要的是我们的博文表,名字可以直接叫做 article,这个表中,肯定要包括以下几点:

博文的标题、博文的内容、博文的发表时间、博文的修改时间、博文的分类、博文的阅读量、博文作者 等

博文的分类,一篇博文只能有一个分类,但是可以有多个标签,比如我现在写的这篇博文,可以分类到 Python 下,但是它可以有多个标签:Django、web开发...

考虑到每一篇博文都只能有一个分类,而一个分类下是可以包含很多博文的,因此分类与博文是一对多的关系,此时应当使用外键来进行关联。

而一篇博文可以有多个标签, 每个标签也可以包含多个博文,因此,标签与博文是多对多的关系。

所以这样下来,就需要设计三个数据表

  • 分类表:
class Category(models.Model): 
    category_name = models.CharField('分类别名', max_length=15) 
    category = models.CharField('分类', max_length=15) 
    category_desc = models.CharField('分类描述', max_length=100, default='暂无描述') 

    def __str__(self): 
        return self.category 
  • 博文表:
class Article(models.Model): 
    author = models.ForeignKey(User, verbose_name='作者', on_delete=models.DO_NOTHING) 
    title = models.CharField('文章标题', max_length=50) 
    content = models.TextField('文章内容') 
    category = models.ForeignKey(Category, verbose_name='所处分类', on_delete=models.DO_NOTHING) 
    reading = models.PositiveIntegerField(default=0) 
    created_time = models.DateTimeField('创建时间', auto_now_add=True) 
    last_edited_time = models.DateTimeField('最后修改时间', auto_now=True) 
  • 最后是标签表

这里我们不需要自己设计,Django有个插件已经帮我们完成了这个任务

首先

python install django-taggit 

然后在上面的博文表中加入tags字段

tags = TaggableManager() 

在 settings.py中注册taggit

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'blog', 
    'taggit', 
] 

这样我们的数据库就设计好了,这时候去生成迁移文件并迁移数据库

python manage.py makemigrations 

python manage.py migrate 
最后修改于2020年3月15日 18:25
©允许规范转载

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处

本文链接:https://www.yangyingqi.com/6.html

Django Python
微信
支付宝
登录后即可进行评论/回复