bbs项目前期准备和表设计

一、前期准备

1.新建一个django项目
2.连接mysql数据库(注意需要在init文件里面书写import pymysql),告诉django使用pymysql连接数据库
3.静态文件路径在settings里配置一下,并且在项目文件夹下新建一个静态文件夹
4.将需要用到bootstrap的css和js文件添加到static文件夹内

二、bbs项目表设计

做一个项目最首要的表的设计,一个表设计不好,后续开发的地基就不牢!

"""
1.用户表:要继承AbstractUser类
扩展字段:
    phone:用户电话
    avatar:用户头像
    create_time:创建时间

2.个人站点表:用户输入什么url就跳转到对应的站点
字段:
    site_name:站点名称
    site_title:站点标题
    site_theme:站点主题

3.文章表:
字段:
    title:文章标题
    desc:文章简介
    content:文章内容
    create_time:发布时间
下述三个字段虽然可以从其他表中获取,但是频繁的跨表查询效率较低,
可以直接在文章表里设计该字段,点赞数+1时只要同步给文章表里的该字段+1就行!(数据库字段优化)
    up_num:点赞数
    down_num:点踩数
    comment_num:评论数

4.文章分类表:
字段:
    name:分类名

5.文章标签表:
字段:
    name:标签名

6.点赞点踩表:记录了哪个用户给哪个文章点赞还是点踩
字段:
    user:用户主键值  ForeignKey(to='UserInfo')
    article:文章主键值 ForeignKey(to='Article')
    is_up:是否点赞(布尔值字段类型)
    is_down:是否点踩(布尔值字段类型)

7.评论表:记录哪个用户给哪个文章评论了什么内容
字段:
    user:用户 ForeignKey(to='UserInfo')
    article:文章 ForeignKey(to='Article')
    content:评论内容
    comment_time:评论时间
    # 评论内容有跟评论和子评论的区别,跟评论是直接评论文章的,子评论是评论跟评论的
    parent:自关联  ForeignKey(to='Comment',null=True) to里面也可以写成self表示自己关联自己
"""

七张表之间的关系

1.用户表和个人站点表:一对一关系,外键建在用户表

2.个人站点表和文章标签表:一对多关系,外键建在文章标签表

3.个人站点表和文章分类 表:一对多关系,外键建在文章分类表

4.个人站点和文章表:一对多关系,外键建在文章表

5.文章表和文章标签表:多对多关系,外键建在文章表

6.文章表和文章分类表:一对多关系,外键建在文章分类表

接下来,我们就可以在models.py里创建对应的表了!

bbs项目表创建源码

from django.db import models
from django.contrib.auth.models import AbstractUser

Create your models here.

1、用户表:继承AbstractUser类,需要先导入这个类
class UserInfo(AbstractUser):
    phone = models.BigIntegerField(verbose_name='电话',null=True)
    avatar = models.FileField(upload_to='avatar/',default='avatar/default.png',verbose_name='头像')
"""
    给avatar字段传文件对象,该文件会自动保存到upload_to='avatar/'指定的文件夹下,这个文件夹需要自己在项目文件夹下创建
    数据库里的avatar字段只保存文件路径,同时可以设置一个默认头像
"""
    create_time = models.DateTimeField(auto_now_add=True,verbose_name='创建时间')
    # 用户表与个人站点表一对一关系,外键建在用户表
    blog = models.OneToOneField(to='Blog',on_delete=models.CASCADE,null=True)

2、个人站点表
class Blog(models.Model):
    site_name = models.CharField(verbose_name='站点名称',max_length=64)
    site_title = models.CharField(verbose_name='站点标题',max_length=64)
    site_theme = models.CharField(verbose_name='站点主题',max_length=256) # 存的是css、js样式的路径

3、文章表
class Article(models.Model):
    title = models.CharField(verbose_name='文章标题',max_length=64)
    desc = models.CharField(verbose_name='文章摘要',max_length=256)
    content = models.TextField(verbose_name='文章内容')
    create_time = models.DateTimeField(verbose_name='创建时间',auto_now_add=True)
    # 数据库字段设计优化
    up_num = models.IntegerField(verbose_name='点赞数',default=0)
    down_num = models.IntegerField(verbose_name='点踩数',default=0)
    comment_num = models.IntegerField(verbose_name='评论数',default=0)
    # 个人站点表和文章表一对多关系,外键建在文章表
    blog = models.ForeignKey(to='Blog',on_delete=models.CASCADE,null=True)
    # 文章表和文章分类表是一对多关系,外键建在文章表
    category = models.ForeignKey(to='Category',null=True,on_delete=models.CASCADE)
    # 多对多关系表的外键
    tag = models.ManyToManyField(to='Tag',through='Article2Tag',through_fields=('article','tag'))
    # 通过Article2Tag这个张表查article就把Article2Tag里的article字段放前面

文章表和标签表的多对多表创建,采用的是半自动的方式,利用扩展自动和查询
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)

4、文章分类表
class Category(models.Model):
    name = models.CharField(verbose_name='分类名',max_length=32)
    # 个人站点表和文章分类表是一对多关系,外键建在文章分类表
    blog = models.ForeignKey(to='Blog',null=True,on_delete=models.CASCADE)

5、文章标签表
class Tag(models.Model):
    name = models.CharField(verbose_name='标签名',max_length=32)
    # 个人站点表和文章标签表是一对多关系,外键建在文章标签表
    blog = models.ForeignKey(to='Blog',null=True,on_delete=models.CASCADE)

6、点赞点踩表
class UpAndDown(models.Model):
    user = models.ForeignKey(to='UserInfo',on_delete=models.CASCADE)
    article = models.ForeignKey(to='Article',on_delete=models.CASCADE)
    is_up = models.BooleanField()

7、评论表
class Comment(models.Model):
    user = models.ForeignKey(to='UserInfo',on_delete=models.CASCADE)
    article = models.ForeignKey(to='Article',on_delete=models.CASCADE)
    content = models.CharField(verbose_name='评论内容',max_length=256)
    create_time = models.DateTimeField(verbose_name='评论时间',auto_now_add=True)
    # 子评论,自关联
    parent = models.ForeignKey(to='self',on_delete=models.CASCADE,null=True)

Original: https://www.cnblogs.com/suncolor/p/16751317.html
Author: 等日落
Title: bbs项目前期准备和表设计

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611198/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 事务的本质和死锁的原理・改

    由于一些错误操作和被爬的原因,我重新整理了 上一篇文章https://…

    数据库 2023年6月9日
    089
  • SQL Server如何修改登录密码

    SQL Server如何修改登录密码 我们在打开SQLserver的时候一般选择的是”Windows身份认证”进行登录,如果选择混合模式该怎么登录呢?或者忘…

    数据库 2023年6月9日
    096
  • 0x01MySQL环境配置与软件安装

    0x01MySQL环境配置与软件安装 工具/原料 操作系统:CentOS7.6 软件版本: MySQL5.7.28 桌面环境:Windows 10 服务器远程工具组合:远程+文件上…

    数据库 2023年6月9日
    087
  • 翻译 | 解读首部 Kubernetes 纪录片

    Honeypot.io 自诩为欧洲最大的技术人才招聘平台,同时提供开发者视频网站,又被称其为 ” 开发者的 Netflix“。2022 年 1 月,该公司与…

    数据库 2023年5月24日
    083
  • Redis 哈希Hash底层数据结构

    Redis 底层数据结构 Redis数据库就像是一个哈希表,首先对key进行哈希运算得到哈希值再取模得到一个下标,每个元素是一个节点,节点之间形成链表。这感觉有点像Java中的Ha…

    数据库 2023年6月14日
    0101
  • MySQL查询性能优化七种武器之索引下推

    前面已经讲了MySQL的其他查询性能优化方式,没看过可以去了解一下: MySQL查询性能优化七种武器之索引潜水 MySQL查询性能优化七种武器之链路追踪 今天要讲的是MySQL的另…

    数据库 2023年5月24日
    0100
  • Postman安装及汉化

    1. 安装postman 各位根据各自需要可以参考下表自行下载,把链接内的”版本号”替换为指定的版本号 操作系统 下载链接 Windows64位 Windo…

    数据库 2023年6月14日
    0101
  • MySQL数据类型和表操作

    MySQL数据类型和表修改 整型的定义 //创建有符号整数表 CREATE TABLE t1 (id TINYINT); //创建无符号整数表 CREATE TABLE t2 (i…

    数据库 2023年6月16日
    099
  • mqtt长连接报错32000

    背景 项目需要使用mqtt协议建立长连接,我是客户端,需要连上服务端同学的提供的地址;客户端使用的是paho提供的客户端sdk,如下: org.eclipse.paho org.e…

    数据库 2023年6月11日
    0127
  • day03-2无异常退出

    多用户即时通讯系统03 4.编码实现02 4.3功能实现-无异常退出系统 4.3.1思路分析 上述代码运行时,在客户端选择退出系统的时候,可以发现程序并没有停止运行,原因是: 退出…

    数据库 2023年6月11日
    087
  • 将博客园内博客移至CSDN

    访问csdn搬家链接:https://mp.csdn.net/mp_blog/tools/move 选择博客园,输入博客园地址、输入搬家通知地址👉勾选”我同意&#822…

    数据库 2023年6月14日
    0109
  • COM组件 学习笔记

    COM组件是 以Win32动态链接库dll或可执行文件exe的形式发布的可执行代码组成的; COM组件是动态链接的,COM使用dll将组件动态链接起来; COM组件是语言无关的; …

    数据库 2023年6月14日
    074
  • LeetCode 21. 合并两个有序链表

    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,…

    数据库 2023年6月11日
    0104
  • 国行XBoxOne第一次开机配置主要问题备忘

    1,Kinect可以在设置中关闭。 2,彻底关闭主机,需要长按主机上的开关键,将主机彻底关机,同时开机只要轻触一下主机开关机键即可 3,不能更新问题:3.1检查网络已连接3.2检查…

    数据库 2023年6月14日
    0242
  • MySQL索引使用方式以及段、区、页概念

    B+树索引的正确使用 索引并不是越多越好,索引创建越多,MySQL维护的代价越高,如果SQL未能完全使用到索引,创建索引的意义是不大的。 适用条件 表x,创建索引a,b,c。主键y…

    数据库 2023年5月24日
    079
  • 自动补全、回滚!介绍一款可视化 sql 诊断利器

    Yearning简介 ================= Yearning MYSQL 是一个SQL语句审核平台。提供查询审计,SQL审核等多种功能,支持Mysql,可以在一定程度…

    数据库 2023年6月9日
    0125
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球