首页 > 其他分享 >BBS项目

BBS项目

时间:2023-01-02 16:45:55浏览次数:35  
标签:verbose 项目 models BBS 文章 null True name

目录

表之间关系

image

先确定表的数量 再确定表的基础字段 最后确定表的外键字段
用户表
替换auth_user表并扩展额外的字段(电话号码、头像、注册时间)

class UserInfo(AbstractUser):
    """用户表"""
    phone = models.BigIntegerField(verbose_name='手机号', null=True)
    avatar = models.FileField(upload_to='avatar/', default='avatar/default.jpg', verbose_name='用户头像')
    register_time = models.DateTimeField(verbose_name='注册时间', auto_now_add=True)

    site = models.OneToOneField(to='Site', on_delete=models.CASCADE, null=True)

个人站点表
站点名称、站点标题、站点样式

class Site(models.Model):
    """个人站点表"""
    site_name = models.CharField(verbose_name='站点名称', max_length=32)
    site_title = models.CharField(verbose_name='站点标题', max_length=32)
    site_theme = models.CharField(verbose_name='站点样式', max_length=32, null=True)  # 简单模拟样式文件

文章表
文章标题、文章简介、文章内容、发布时间

class Article(models.Model):
    """文章表"""
    title = models.CharField(verbose_name='文章标题', max_length=32)
    desc = models.CharField(verbose_name='文章简介', max_length=255)
    content = models.TextField(verbose_name='文章内容')
    create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
    # 三个优化字段
    comment_num = models.IntegerField(verbose_name='评论数', default=0)
    up_num = models.IntegerField(verbose_name='点赞数', default=0)
    down_num = models.IntegerField(verbose_name='点踩数', default=0)

    site = models.ForeignKey(to='Site', on_delete=models.CASCADE, null=True)
    category = models.ForeignKey(to='Category', on_delete=models.CASCADE, null=True)
    tags = models.ManyToManyField(to='Tag',
                                  through='Article2Tag',
                                  through_fields=('article', 'tag'),
                                  null=True
                                  )


文章表与个人站点表是一对多外键关系
文章表与文章分类表是一对多外键关系
文章表与文章标签表是多对多外键关系
       '''
       数据库字段优化设计:我们想统计文章的评论数 点赞数
       		通过文章数据跨表查询到文章评论表中对应的数据统计即可
       但是文章需要频繁的展示 每次都跨表查询的话效率极低
       		我们在文章表中再创建三个普通字段
       之后只需要确保每次操作评论表或者点赞点踩表时同步修改上述三			个普通字段即可
       '''

文章分类表
分类名称

class Category(models.Model):
    """文章分类表"""
    name = models.CharField(verbose_name='分类名称', max_length=32)
    site = models.ForeignKey(to='Site', on_delete=models.CASCADE, null=True)

文章标签表
标签名称

class Tag(models.Model):
    """文章标签表"""
    name = models.CharField(verbose_name='标签名称', max_length=32)
    site = models.ForeignKey(to='Site', on_delete=models.CASCADE, null=True)

自定义多对多表(文章表和标签表)

class Article2Tag(models.Model):
    article = models.ForeignKey(to='Article', on_delete=models.CASCADE, null=True)
    tag = models.ForeignKey(to='Tag', on_delete=models.CASCADE, null=True)

点赞点踩表
记录哪个用户给哪篇文章点了推荐(赞)还是反对(踩)
用户字段(用户主键)>>>:外键字段
文章字段(文章主键)>>>:外键字段
点赞点踩

class UpAndDown(models.Model):
    """文章点赞点踩表"""
    user = models.ForeignKey(to='UserInfo', on_delete=models.CASCADE, null=True)
    article = models.ForeignKey(to='Article', on_delete=models.CASCADE, null=True)
    is_up = models.BooleanField(verbose_name='点赞点踩')  # 传布尔值存 0或者1

文章评论表:记录哪个用户给哪篇文章评论了什么内容
用户字段(用户主键)>>>:外键字段
文章字段(文章主键)>>>:外键字段
评论内容
评论时间
外键字段(自关联)

class Comment(models.Model):
    """文章评论表"""
    user = models.ForeignKey(to='UserInfo', on_delete=models.CASCADE, null=True)
    article = models.ForeignKey(to='Article', on_delete=models.CASCADE, null=True)
    content = models.TextField(verbose_name='评论内容')
    comment_time = models.DateTimeField(auto_now_add=True, verbose_name='评论时间')
    parent = models.ForeignKey(to='self', on_delete=models.CASCADE, null=True)

标签:verbose,项目,models,BBS,文章,null,True,name
From: https://www.cnblogs.com/winter-yu1989/p/17020088.html

相关文章

  • BBS注册登入
    主题:仿BBS项目项目开发基本流程项目分析(表)项目注册功能项目登录功能今日内容详细项目开发基本流程1.需求分析2.架构设计3.分组开发4.提交测试5.交付上线......
  • 项目开发基本流程 、项目流程 、注册功能、 登录功能
    目录项目开发基本流程项目流程注册功能登录功能项目开发基本流程1.需求分析2.架构设计3.分组开发4.提交测试5.交付上线项目流程仿造博客园项目 核心:文章的增删......
  • BBS 项目分析
    项目开发流程#1.核心文章的增删改查#2.表关系分析确定表的数量,确定表的基础字段,最后确定表的外键字段#3.表1.用户表2.个人站点表......
  • 1月2日内容总结——bbs仿博客园项目(开发流程、注册登陆功能)
    目录项目开发基本流程项目流程注册功能登录功能作业项目开发基本流程1.需求分析2.架构设计3.分组开发4.提交测试5.交付上线项目流程仿造博客园项目 核心:文章的......
  • 编写第一个项目
    1.创建文件夹  命名为com.course  2.创建文件  命名为c1  输入代码publicclassc1{publicstaticvoidmain(String[]args){System.......
  • 启动web自动化项目
    1.启动web自动化项目前端服务解压文件名为apache-tomcat-7.0.104文件进入bin文件夹,找到文件名为startup.bat,双击此文件2.启动web自动化项目后端服务解压文件名为web.j......
  • 启动接口自动化项目
    1.解压文件名为jmeter-interface-exercise.jar文件至根目录2.打开cmd输入启动命令输入;java-jarjmeter-interface-exercise.jar   3.访问IP;http://localhost:80......
  • vue项目使用百度地图
    //b_map.jsexportfunctionMP(ak){  returnnewPromise(function(resolve,reject){   window.init=function(){    resolve(BMap); ......
  • 在线视频项目学习笔记(四)—前台分类相关
    一、分类列表接口 即在分类模块显示所有的一级分类以及其子类。   注意:上图中在返回的对象中封装了一个List二、根据分类ID查询分类的具体信息 ......
  • 分享:github的算法项目
    ​​https://github.com/0voice/algorithm-structure​​......