首页 > 其他分享 >bbs项目前期准备和表设计

bbs项目前期准备和表设计

时间:2022-10-03 21:35:24浏览次数:51  
标签:name ForeignKey models 和表 站点 文章 bbs 项目前期 verbose

一、前期准备

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

二、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()
    is_down = 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)

标签:name,ForeignKey,models,和表,站点,文章,bbs,项目前期,verbose
From: https://www.cnblogs.com/suncolor/p/16751317.html

相关文章

  • 广义表中表头和表尾基本知识
    广义表((a,b),c,d)表头和表尾分别是什么? 公式:(1)表头:当广义表LS非空时,称第一个元素为LS的表头;(2)表尾:称广义表LS中除去表头后其余元素组成的广义表为LS的表尾。区别:表头是元......
  • 在MyBatis中,当实体类的属性名和表中的字段名不一样,怎么办?
    第一种通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致<selectid=”selectorder”parametertype=”int”resultetype=”me.gacl.domain.......
  • 极客--全局锁和表锁、行锁
    根据加锁的范围,Mysql里面的锁大致可以分成全局锁、表级锁和行锁全局锁Flushtableswithreadlock。当你需要整个库处于只读状态的时候,可以使用这个命令,之后其他线程......
  • 为什么tcp/ip协议没有会话层和表示层?
    先有了tcpip协议栈的实现,并应用在Unix系统中。之后才有了osi七层模型,才提出的会话层,表示层等概念。七层模型是专家讨论出的理想模型,tcpip实现模型流行起来后,已有的系统......
  • BBS多人博客系统
    今日内容项目开发流程项目名字:BBS:多人博客系统传统软件行业:给第三方做解决方案互联网行业:饿了么,叮咚买菜...软件开发流程:-项目立项(高层,市场人员:市场调研,跟客户对......
  • Django ORM 常用字段和表查询
    表查询数据准备及测试环境搭建sqllite3django自带sqllite3小型数据库该数据库功能非常有限,并且针对日期类型的数据兼容性很差django切换MySQL数据django1.x版本的......
  • Oracle根据用户名和表名查询表的字段和字段类型等信息
    1 该用户下所有表的字段筛选方法selecta.column_nameasuploadcolumnfromuser_tab_columnsawherea.DATA_TYPE='VARCHAR2'anda.TABLE_NAME='DCS_MED......
  • 列表和表格
    列表和表格列表简介列表就是信息资源的一种展示形式。它可以使信息结构化和条理化,并以列表的样式显示出来,以便浏览者能更快捷地获得相应地信息列表项内部可以使用段......
  • Rust 从入门到精通06-语句和表达式
    1、语句和表达式语句和表达式是Rust语言实现逻辑控制的基本单元。在Rust程序里面,语句(Statement)是执行一些操作但不返回的指令,表达式(Expressions)计算并产生一个值。表......
  • PL/SQL Developer 导出表结构和表数据
    PL/SQLDeveloper导出表结构和表数据-百度经验 https://jingyan.baidu.com/article/fcb5aff78e6a48edab4a7146.html工作的时候需要从plsql中导出表结构和表数据......