BBS-个人博客项目完整搭建

项目开发流程

项目分类

现在互联网公司需要开发的主流Web项目一般分为两类:面向互联网、公司内部管理。

 面向互联网用户:C(consumer)端项目

 公司内部管理:B(business)端项目

还有一类Web应用:基本采用基于角色的权限控制,不同的员工在这套系统中拥有不同的权限,试营业公司内部管理。

# 基于权限的后台关系系统:RBAC权限管理系统

项目开发模式分类

最常见的两类为瀑布开发模式和敏捷开发模式

项目开发流程:

  -立项
  -需求分析
  -原型图(产品画的)
  -切图
  -技术选型,数据库架构设计
  -前后端协同开发
  -上线测试服务器联调
  -测试
  -修改bug
  -上线运行

BBS多人博客项目基本功能和需求

开发任意的项目第一个阶段就是弄清楚你要开发什么功能

一个项目最重要的就是表结构的设计,大部分时间都是用来设计表。

在企业中对于一个完成的项目写代码的事假大概有个30%,其余时间都用来做铺垫

比如:产品需求的确定,技术选型,数据库设计...

BBS数据库表结构设计

 在我们分析完一个项目的需求之后,我们着手开发项目所需要做的第一件事就是设计数据库的表结构及其字段。

用户表(UserInfo)

继承了auth_user这张表,对它进行扩展

字段有:

  phone:手机号

  avatar:头像,存储的是头像地址

  create_time:用户注册时间

具体的表创建如下:

复制代码
from django.contrib.auth.models import AbstractUser

# 用户表,继承auth_user表
class UserInfo(AbstractUser):
    phone = models.BigIntegerField(verbose_name='手机号', null=True)  # 可以为空
    # 头像,存储的是头像地址,文件路径,该文件会自动存储到avatar文件下,然后avatar字段只保存文件路径
    avatar = models.FileField(upload_to='avatar/', default='avatar/default.png',verbose_name='用户头像')
    # 用户注册时间,会自动添加注册时间
    create_time = models.DateTimeField(auto_now_add=True)
    # 用户表和站点表的关系:一对一,一个用户对应一个个人站点表
    blog = models.OneToOneField(to='Blog', null=True, on_delete=models.CASCADE)
复制代码

 

个人站点表(Blog)

字段有:

  site_name:站点名称

  site_title:站点标题

  site_theme:站点样式

具体的表创建如下:

# 个人站点表
class Blog(models.Model):
    site_name = models.CharField(max_length=32, verbose_name='站点名称')
    site_title = models.CharField(max_length=32, verbose_name='站点标题')
    # 存css/js文件路径
    site_theme = models.CharField(max_length=64, verbose_name='站点样式')

 

分类表(Category)

字段有:

  name:分类名称

具体的表创建如下:

# 分类表
class Category(models.Model):
    name = models.CharField(max_length=32, verbose_name='分类名称')  # 文章分类
    # 站点表和分类表的关系:一对多,一个站点可以有多个分类
    blog = models.ForeignKey(to='Blog', null=True, on_delete=models.CASCADE)

 

标签表(Tag)

字段有:

  name:标签名称

具体的表创建如下:

# 标签表
class Tag(models.Model):
    name = models.CharField(max_length=32, verbose_name='标签名称')  # 文章标签
    # 站点表和标签表的关系:一对多,一个站点可以有多个标签
    blog = models.ForeignKey(to='Blog', null=True, on_delete=models.CASCADE)

 

文章表(Article)

字段有:

  title:文章标题

  desc:文章简介

  content:文章内容

  create_time:创建时间

  (数据库优化处理)

  up_num:点赞量

  down_num:点踩量

  comment_num:评论数

具体的表创建如下:

复制代码
# 文章表
class Article(models.Model):
    title = models.CharField(max_length=64, verbose_name='文章标题')
    desc = models.CharField(max_length=225, verbose_name='文章摘要')  # 文章简介
    # 文章内容有很多 一般情况下都是使用TextField
    content = models.TextField(verbose_name='文章内容')
    create_time = models.DateField(auto_now_add=True, verbose_name='创建时间')
    # 对数据库的优化处理
    up_num = models.IntegerField(verbose_name='点赞数量')
    down_num = models.IntegerField(verbose_name='点踩数量')
    comment_num = models.IntegerField(verbose_name='评论的数量')
    # 外检字段的创建
    # 站点表和文章表的关系:一对多,一个站点可以有多个文章
    blog = models.ForeignKey(to='Blog', null=True, on_delete=models.CASCADE)
    # 分类表和文章表的关系:一对多,一个分类里可以有多篇文章
    cate = models.ForeignKey(to='Category', null=True, on_delete=models.CASCADE)
    # 标签表和文章表的关系:多对多,一个文章可以有多个标签,一个标签可以对应多个文章
    # 通过自建第三张表来存储他们的关系
    tag = models.ManyToManyField(to='Tag', through='Article2Tag', through_fields=('article', 'tag'))


# 文章表和标签表关系的第三张表
class Article2Tag(models.Model):
    article = models.ForeignKey(to='Article', null=True, on_delete=models.CASCADE)
    tag = models.ForeignKey(to='Tag', null=True, on_delete=models.CASCADE)
复制代码

 

点赞点踩表(UpAndDown)

字段有:

  user:用户id

  article:文章id

  is_up:点赞/点踩(存储布尔值,后端用0,1)

  create_time:用户操作的时间

具体的表创建如下:

# 点赞点踩表
class UpAndDown(models.Model):
    user = models.ForeignKey(to='UserInfo', null=True, on_delete=models.CASCADE)  # 可以获取到用户id
    article = models.ForeignKey(to='Article', null=True, on_delete=models.CASCADE)
    is_up = models.BooleanField()  # 后端传布尔值,0/1

 

评论表(Comment)

字段有:

  user:用户id

  article:文章id

  content:评论内容

  comment_time:评论时间

  parent_id:根评论id

具体的表创建如下:

# 评论表
class Comment(models.Model):
    user = models.ForeignKey(to='UserInfo', null=True, on_delete=models.CASCADE)
    article = models.ForeignKey(to='Article', null=True, on_delete=models.CASCADE)
    content = models.CharField(max_length=225, verbose_name='评论内容')
    comment_time = models.DateField(auto_now_add=True,verbose_name='评论时间')
    # parent_id = models.ForeignKey(to='Comment',null=True,on_delete=models.CASCADE) # 自关联
    parent_id = models.ForeignKey(to='self', null=True, on_delete=models.CASCADE)

 

posted @   Maverick-Lucky  阅读(89)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示