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。