寫在前面:無論遇到什麼困難,都要微笑面對呀!!!加油加油
以此來記錄個人博客開發歷程
1.前端頁面選擇
爲自己的博客選擇好看的前端頁面,因爲我是自學Python + Django後端開發,不瞭解前端內容,所以直接在模板網站下載好看的界面來修改即可。我選擇的是17素材上的前端頁面,選擇完成下載即可。(有的是需要VIP和金幣的,就只能八仙過海,各顯神通了;我這邊有十個前端模板,若同學需要可以私信或者留言)
2.博客功能構思
在寫代碼之前,需要對要實現的博客功能和界面做一個簡要規劃,磨刀不誤砍柴工嘛。
我希望實現的功能
- 博客展示 首頁:展示博客標題、摘要、作者等簡要信息,點擊可以進入博客詳細頁;博客詳細頁:展示完整的博客內容,同時在博客下方有評論內容,需要登錄纔可以添加評論,否則只能查看評論;可以根據發佈日期、博客分類、博客標籤進入該類的博客展示頁。
- 用戶主頁 用戶登錄後可以進入個人主頁,可以展示個人評論和個人博客;同時可以添加新博客。
- (不會很全,只是大概羅列了一個方向)
業務邏輯分析
- 博客表:標題、作者、摘要、發佈日期、分類、標籤、閱讀量、評論、內容
- 用戶表:登錄用戶名、登錄密碼、暱稱、評論、發佈博客
- 評論表:內容、發佈用戶、發佈博客、發佈時間等
- 博客分類表:分類名
- 博客標籤表:標籤名
- 備註:在進行業務邏輯分析的過程中,有許多不完善的地方,需要結合開源項目來完善
基於以上,可以看出博客、用戶是比較獨立的功能,所以可以單獨建立apps。此外,我參照開源項目將評論也單獨作爲一個apps。
接下來,準備開發model層
3. Model層開發(上)
本項目使用PyCharm-2019.3開發
- 新建Django項目
- 在終端使用命令創建用戶(user)、博客(blog)、評論(comments)三個子應用
django-admin startapp user
django-admin startapp comments
django-admin startapp blog
每條執行完之後回車
執行完之後目錄結構如圖。
- 在settings.py中添加apps,修改數據庫、語言類型和時區
- 使用PyCharm連接數據庫,在General 中輸入登錄用戶名和密碼,在Advanced中修改serverTimezone 爲 Asia/Shanghai(這是因爲在創建數據庫或表的時候,MySQL可能會報時區錯誤異常,在這裏設置以解決該問題)
- 在settings.py中數據庫配置中 ’NAME‘ 對應的數據庫名爲Blog(個人創建,可根據需要自行設置),在MySQL中創建數據庫(MySQL大小寫不敏感,所以數據庫名可以直接用 blog 就好,這樣在後面看起來舒服一點,圖就不改了…汗)
- 博客表結構的創建
- 博客表
列名 | 字段名 | 字段類型 |
---|---|---|
主鍵 | id | AutoField |
博客標題 | blogTitle | CharField |
博客作者 | blogAuthor | ForeignKey |
博客摘要 | abstract | CharField |
發佈日期 | createDatetime | DateTimeField |
種類 | category | ForeignKey |
標籤 | tags | ManyToManyField |
博客正文 | text | TextField |
瀏覽量 | viewsCount | PositiveIntegerField |
評論數 | commentsCount | PositiveIntegerField |
外鍵約束說明:博客表中的作者、種類、標籤分別與用戶表、種類表、標籤表相關聯。一個作者對應多個博客、一個博客只有一個作者(一對多,ForeignKey);一個博客只有一個種類,一個分類下有多篇博客(一對多,ForeignKey);一篇博客有多個標籤,一個標籤下有多篇博客(多對多,ManyToManyField)。刪除博客,種類、作者不會受影響,刪除作者或種類,該分類下的所有博客被刪除,級聯操作(在一對多的關係中),所以在外鍵約束中加入 on_delete = models.CASADE;
- 博客種類表
列名 | 字段名 | 字段類型 |
---|---|---|
主鍵 | id | AutoField |
博客種類 | name | CharField |
- 博客標籤表
列名 | 字段名 | 字段類型 |
---|---|---|
主鍵 | id | AutoField |
標籤名 | name | CharField |
補充:還需要增加一些關鍵字來約束這些字段,如:blank = True / False : 在Django後臺管理中新增一條內容時該字段是否可以爲空;default = 設置默認值 ; unique = True / False 能否重複;primary_key = 是否是主鍵等。常用字段約束在本篇博客末尾附表…
對博客表結構在前期按照以上表結構創建,在blog/model.py中寫入模型類代碼
from django.db import models
from user.models import User
# 引入timezone用於記錄博客創建時間
from django.utils import timezone
# Create your models here.
class Category(models.Model):
id = models.AutoField(verbose_name='主鍵', primary_key=True)
name = models.CharField(verbose_name='種類名', max_length=100, unique=True)
class Tag(models.Model):
id = models.AutoField(verbose_name='主鍵', primary_key=True)
name = models.CharField(verbose_name='標籤名', max_length=100, unique=True)
class Blog(models.Model):
id = models.AutoField(verbose_name='主鍵', primary_key=True)
blogTitle = models.CharField(verbose_name='文章標題', max_length=70, unique=True)
abstract = models.CharField(verbose_name='摘要', max_length=200, blank=True)
createDatetime = models.DateTimeField(verbose_name='創建時間', blank=True, default=timezone.now)
viewsCount = models.PositiveIntegerField(verbose_name='瀏覽量', blank=True, default=0)
commentsCount = models.PositiveIntegerField(verbose_name='評論數', blank=True, default=0)
text = models.TextField(verbose_name='博客正文')
blogAuthor = models.ForeignKey(to=User, on_delete=models.CASCADE, verbose_name='作者')
category = models.ForeignKey(to=Category, on_delete=models.CASCADE, verbose_name='分類')
tags = models.ManyToManyField(to=Tag, verbose_name='標籤')
還需要先在user/models.py 下新建一個User類,用pass佔位。
補充:
常用字段約束
字段約束 | 含義 | 默認值 |
---|---|---|
primary_key | 是否是主鍵 | False(不是主鍵) |
null | 能否爲空 | False(不能爲空) |
unique | 能否重複 | False(可以重複) |
default | 默認值 | False |
blank | 在Django後臺中能否爲空 | False(不能爲空) |