Django开发个人博客项目-(3)博客数据库设计

欢迎访问我的博客:小羊驼的部落阁
Django是通过Model操作数据库,不管你数据库的类型是MySql或者Sqlite,Django它自动帮你生成相应数据库类型的SQL语句,所以不需要关注SQL语句和类型,对数据的操作Django帮我们自动完成。只要回写Model就可以了!

首先是博客文章这个表,肯定要包括以下几点:博客的标题、博客的内容、博客的发表时间、博客的修改时间、博客的分类、博客的点击量。当然,一般情况下还要有博客的作者,因为我们整个网站发布文章的都是只有我们自己一个人,也就是不包含其它用户,因此作者这里就可以不写了。针对博客的分类,我们我们有很多网站可以参考,这里就不赘述了,一篇博客只能有一个分类,但是可以有多个标签,比如我现在写的这篇博客,可以分类到django 下,但是它可以有多个标签:django、博客、数据库、开发……
考虑到每一篇博客都只能有一个分类,而一个分类下是可以包含很多博客的,因此分类与博客是一对多的关系,此时应当使用外键来进行关联。而一篇博客可以有多个标签, 每个标签也可以包含多个博客,因此,标签与博客是多对多的关系。关于一对多与多对多的知识话题,这里就不再展开了,不熟悉的同学可以查看django文档与相关资料。

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

标签(Tag)表:

class Tag(models.Model):
    """
    文章标签
    """
    name = models.CharField(verbose_name='文章标签', max_length=20)
    number = models.IntegerField(verbose_name='标签数目', default=1)
    class Meta:
        verbose_name = '文章标签'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

分类(category)表:

我们这里采用的是多级分类,即Python分类下有django和Flask分类。在这里我们需要使用MPTT,我们先在虚拟环境中安装mptt

pip install django-mptt

然后将mptt注册到app中:

INSTALLED_APPS = [
  ...
    'myblog',
     'mptt',
  
]

回到models.py中,导入from mptt.models import MPTTModel

class Category(MPTTModel):
    name = models.CharField('文章分类', max_length=50, unique=True)
    parent_name = models.ForeignKey('self', verbose_name='上级分类', null=True, blank=True, related_name='children', on_delete=models.CASCADE)
    number = models.IntegerField(verbose_name='分类数目', default=1)
    class Meta:
        db_table = 'category'
        verbose_name = verbose_name_plural = '文章分类'

    class MPTTMeta:
        parent_attr = 'parent_name'


    def __str__(self):
        return self.name

博客(blog)表:

在有的博客中, 我们可能需要用到文章封面,但是文章封面需要有个上传的地方,此时我们就需要在项目根目录下创建一个uploads文件夹,然后在settings.py底部写入以下:

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')  #uploads必须存在,且在项目目录下
MEDIA_URL = '/uploads/'   #你上传的文件和图片会默认存在/uploads/editor下

然后在blog文件夹中的url.py中加上:

from django.contrib import admin
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
    path('admin/', admin.site.urls),
]
if settings.DEBUG:
    # static files (images, css, javascript, etc.)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

创建blog表:


class Blog(models.Model):
    """
    博客
    """
    title = models.CharField(verbose_name='标题', max_length=100)
    abstract = models.TextField(verbose_name='摘要', max_length=200, default='', blank=True)
    img = models.ImageField(upload_to='article_img/%Y/%m/%d/', verbose_name='文章图片', blank=True, null=True)
    content = models.TextField()
    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='文章分类', on_delete=models.CASCADE)
    tag = models.ManyToManyField(Tag, verbose_name='文章标签')


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

    def __str__(self):
        return self.title

最后:

在Run manage.py Task中执行

makemigrations    # 生成迁移文件

migrate    # 迁移数据表

即可将这三个表添加到我们的数据库中。

注意:

我们使用的是mysql5.7,但是我们目前并不适用mysql,而是使用Django自带的sqllite数据库,关于配置mysql数据库,我们后面再说。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容