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)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:bbs项目前期准备和表设计 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • 基础数据类型之字典

    1.字典的定义 使用{}定义字典,括号内用逗号分隔开多个key:value,其中value可以是任意类型,但是key必须是不可变类型且不能重复,是无序的! info=[ [‘name’,’zhang’], (‘age’,19) [‘gender’,’男’] ] d={} # 第一种方式定义 d=dict(x=1,y=2) #第二种,dict里面也可以穿一个i…

    Python开发 2023年4月2日
    00
  • 轮播图前端

    轮播图组件 <template> <div id=”banner”> <el-carousel height=”400px”> <!– 将banner_list循环–> <el-carousel-item v-for=”item in banner_list” :key=”item”> <…

    2023年4月2日
    00
  • cpu详解

    1.cpu的指令集和分类 1.1cpu的指令集 cpu的指令集指的是:控制计算机硬件的一系列命令。 指令集可以分为: 1.精简指令集:更短、更稳定,每条指令集运行的时间更短2.复杂指令集:可以完成更复杂的功能。需要花费的时间更长 1.2cpu的分类 cpu按照指令集可以分为:精简指令集cpu和复杂指令集cpu 2.x86-64位的概念 x86针对的是cpu的…

    2023年4月2日
    00
  • 序列化组件

    序列化组件的三大功能 序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串 反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器可以把字典转成模型 反序列化时同时会完成数据校验功能 序列化器Serializer使用方法 查询单个数据语法: 1.在setting.py中的app配置里注册一下drf 2.在dj…

    2023年4月2日
    00
  • 多道技术、同步异步和阻塞非阻塞

    前期需要储备的知识点 并发 看起来同时运行的就可以称之为并发,其实内部是做了0.1秒A,做了0.1秒B,交替进行运作,看起来像是一起运作的。 并行 真正意义上的同时执行 补充 1.并行肯定算是并发2.单核的计算机肯定不能实现并行,但是可以实现并发!!3.我们这里的单核是假设就是一个核,干活的就一个人,不考虑cpu里面的内核 1. 多道技术 1.1 什么是多道…

    2023年4月2日
    00
  • 注册功能页面的搭建

    思路分析 注册页面需要对用户提交的数据进行校验,并且需要对用户输入错误的地方进行提示! 所有我们需要使用forms组件搭建注册页面! 平时我们书写form是组件的时候是在views.py里面书写的,但是为了接耦合,我们需要将forms组件都单独写在一个地方,需要用的时候导入就行! 例如,在项目文件夹下创建一个myforms文件夹,里面放各种forms组件文件…

    2023年4月2日
    00
  • git的介绍和使用

    git介绍 什么是git git是一种版本控制器 – 控制的对象是开发的项目代码 什么是版本控制器 完成 协同开发 项目,帮助程序员整合代码 i)帮助开发者合并开发的代码 ii)如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突 软件:SVN 、 GIT(都是同一个人的个人项目) github、gitee(两个采用git版本控制器管理代码的公…

    2023年4月2日
    00
  • django自带的序列化组件

    1.什么是序列化组件 在django中,自带一个序列化组件,它是用来将数据进行整理、转化成特定的为一个特定的格式(比如json数据格式),然后传输给前端,以便前端对数据进行处理操作。 2.为什么要用序列化组件 当我们从数据库取出一些数据时,我们需要将数据转成特定的格式,比如列表套字典的形式,然后将这些数据序列化成json的格式传输给前端,这就需要我们在后端把…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部