个人博客开发-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(不能为空)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章