個人博客開發-01(基於Python-3.8 + Django-2.2)

寫在前面:無論遇到什麼困難,都要微笑面對呀!!!加油加油
以此來記錄個人博客開發歷程

1.前端頁面選擇

爲自己的博客選擇好看的前端頁面,因爲我是自學Python + Django後端開發,不瞭解前端內容,所以直接在模板網站下載好看的界面來修改即可。我選擇的是17素材上的前端頁面,選擇完成下載即可。(有的是需要VIP和金幣的,就只能八仙過海,各顯神通了;我這邊有十個前端模板,若同學需要可以私信或者留言)

2.博客功能構思

在寫代碼之前,需要對要實現的博客功能和界面做一個簡要規劃,磨刀不誤砍柴工嘛。

我希望實現的功能

  • 博客展示 首頁:展示博客標題、摘要、作者等簡要信息,點擊可以進入博客詳細頁;博客詳細頁:展示完整的博客內容,同時在博客下方有評論內容,需要登錄纔可以添加評論,否則只能查看評論;可以根據發佈日期、博客分類、博客標籤進入該類的博客展示頁。
  • 用戶主頁 用戶登錄後可以進入個人主頁,可以展示個人評論和個人博客;同時可以添加新博客。
  • (不會很全,只是大概羅列了一個方向)

業務邏輯分析

  • 博客表:標題、作者、摘要、發佈日期、分類、標籤、閱讀量、評論、內容
  • 用戶表:登錄用戶名、登錄密碼、暱稱、評論、發佈博客
  • 評論表:內容、發佈用戶、發佈博客、發佈時間等
  • 博客分類表:分類名
  • 博客標籤表:標籤名
  • 備註:在進行業務邏輯分析的過程中,有許多不完善的地方,需要結合開源項目來完善
    基於以上,可以看出博客、用戶是比較獨立的功能,所以可以單獨建立apps。此外,我參照開源項目將評論也單獨作爲一個apps。
    接下來,準備開發model層

3. Model層開發(上)

本項目使用PyCharm-2019.3開發

  1. 新建Django項目
  2. 在終端使用命令創建用戶(user)、博客(blog)、評論(comments)三個子應用

django-admin startapp user
django-admin startapp comments
django-admin startapp blog
每條執行完之後回車
在這裏插入圖片描述
執行完之後目錄結構如圖。

  1. settings.py中添加apps,修改數據庫、語言類型和時區
  2. 使用PyCharm連接數據庫,在General 中輸入登錄用戶名和密碼,在Advanced中修改serverTimezone 爲 Asia/Shanghai(這是因爲在創建數據庫或表的時候,MySQL可能會報時區錯誤異常,在這裏設置以解決該問題)
    在這裏插入圖片描述
  3. 在settings.py中數據庫配置中 ’NAME‘ 對應的數據庫名爲Blog(個人創建,可根據需要自行設置),在MySQL中創建數據庫(MySQL大小寫不敏感,所以數據庫名可以直接用 blog 就好,這樣在後面看起來舒服一點,圖就不改了…汗)
    在這裏插入圖片描述
  4. 博客表結構的創建
  • 博客表
列名 字段名 字段類型
主鍵 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(不能爲空)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章