1. 程式人生 > >Django開發個人部落格網站——6、部落格網站資料庫的設計

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。