Django 快速搭建博客 第三節(jié)

上一節(jié)我們已經(jīng)能在pycharm下新建了blog app了, 這個(gè)時(shí)候,我們需要設(shè)計(jì)一下博客的數(shù)據(jù)庫設(shè)計(jì)
  1. 關(guān)于數(shù)據(jù)庫表的設(shè)計(jì),作為新手的我們并不需要要求懂太多稍微的懂一些也就可以了,畢竟數(shù)據(jù)庫也是需要有一定的功底的,

這里我們依據(jù)博客學(xué)習(xí),將博客表設(shè)計(jì)為三份:文章表,標(biāo)簽表,分類表

結(jié)構(gòu)類似于這樣子:


文章表.png

分類與標(biāo)簽表.png

圖片也是截的,比較丑,這里我按照我個(gè)人的理解,說一下:

每一篇文章都有對應(yīng)的文章id,正文,發(fā)表時(shí)間,分類,標(biāo)簽
這很合理,我們能理解,但是!每篇文章都有些分類,標(biāo)簽,這樣會產(chǎn)生重復(fù)的數(shù)據(jù),造成資源的浪費(fèi),所以我們把分類與標(biāo)簽提取出來,單獨(dú)做成表,再跟文章相關(guān)聯(lián)起來。這就有了圖二的內(nèi)容。

2 接下來我們開始在blog/models下進(jìn)行數(shù)據(jù)庫表的創(chuàng)建(注意:因?yàn)閐jango使用的orm系統(tǒng)(Object Relational Mapping ))
貼上這里的三個(gè)表結(jié)構(gòu):

from django.db import models

# 專門用于處理網(wǎng)站用戶的注冊、登錄等流程,User 是 Django 為我們已經(jīng)寫好的用戶模型。
from django.contrib.auth.models import User
# Create your models here.


# 分類數(shù)據(jù)庫表
class Category(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

# 標(biāo)簽數(shù)據(jù)庫
class Tag(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

# 文章數(shù)據(jù)庫
class Post(models.Model):
    '''
    文章數(shù)據(jù)庫包含字段:標(biāo)題title 正文body  創(chuàng)建時(shí)間created_time
    修改時(shí)間modified_time 摘要excerpt  分類category 標(biāo)簽tag 作者author
    '''
    title = models.CharField(max_length=100)

    body = models.TextField()

    created_time = models.DateTimeField()

    modified_time = models.DateTimeField()

    # blank 為true表示參數(shù)可以為空值za
    excerpt = models.CharField(max_length=200,blank=True)

    # ForeignKey,即一對多的關(guān)聯(lián)關(guān)系(一個(gè)分類下可以有多篇文章)
    category = models.ForeignKey(Category)

    # 而對于標(biāo)簽來說,一篇文章可以有多個(gè)標(biāo)簽,同一個(gè)標(biāo)簽下也可能有多篇文章,
    # 所以我們使用 ManyToManyField,表明這是多對多的關(guān)聯(lián)關(guān)系。文章可以沒有標(biāo)簽,所以blank可以為true
    tag = models.ForeignKey(Tag,blank=True)

    # 文章作者,這里 User 是從 django.contrib.auth.models 導(dǎo)入的。
    # django.contrib.auth 是 Django 內(nèi)置的應(yīng)用,專門用于處理網(wǎng)站用戶的注冊、登錄等流程,
    # User 是 Django 為我們已經(jīng)寫好的用戶模型。
    # 這里我們通過 ForeignKey 把文章和 User 關(guān)聯(lián)了起來。
    # 因?yàn)槲覀円?guī)定一篇文章只能有一個(gè)作者,而一個(gè)作者可能會寫多篇文章,因此這是一對多的關(guān)聯(lián)關(guān)系,和 Category 類似
    author = models.ForeignKey(User)

    def __str__(self):
        return self.title

以后有機(jī)會會改善代碼的顯示界面,如果支持的情況下,我們這里再貼上代碼的圖片

圖片.png
圖片.png

3 同步數(shù)據(jù)庫:

圖片.png
圖片.png

如果想知道django是如何操作數(shù)據(jù)庫的,可以使用命令:

圖片.png

這里再貼一下使用數(shù)據(jù)庫的命令:

python manage.py makemigrations
python manage.py migrate

當(dāng)我們看到Applying blog.0001_initial ....ok 就說明同步數(shù)據(jù)庫成功了。

python manage.py sqlmigrate blog 0001

django命令行知識:

1 同步數(shù)據(jù)庫: python manage.py makemigrations
python manage.py migrate

2 查看django如何操作數(shù)據(jù)庫:python manage.py sqlmigrate blog 0001

以上就是建數(shù)據(jù)庫表的設(shè)計(jì)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容