bbs项目前期准备和表设计

打印 上一主题 下一主题

主题 918|帖子 918|积分 2754

一、前期准备
  1. 1.新建一个django项目
  2. 2.连接mysql数据库(注意需要在init文件里面书写import pymysql),告诉django使用pymysql连接数据库
  3. 3.静态文件路径在settings里配置一下,并且在项目文件夹下新建一个静态文件夹
复制代码
二、bbs项目表设计

做一个项目最首要的表的设计,一个表设计不好,后续开发的地基就不牢!
  1. """
  2. 1.用户表:要继承AbstractUser类
  3. 扩展字段:
  4.         phone:用户电话
  5.         avatar:用户头像
  6.         create_time:创建时间
  7. 2.个人站点表:用户输入什么url就跳转到对应的站点
  8. 字段:
  9.         site_name:站点名称
  10.         site_title:站点标题
  11.         site_theme:站点主题
  12. 3.文章表:
  13. 字段:
  14.         title:文章标题
  15.         desc:文章简介
  16.         content:文章内容
  17.         create_time:发布时间
  18. 下述三个字段虽然可以从其他表中获取,但是频繁的跨表查询效率较低,
  19. 可以直接在文章表里设计该字段,点赞数+1时只要同步给文章表里的该字段+1就行!(数据库字段优化)
  20.         up_num:点赞数
  21.         down_num:点踩数
  22.         comment_num:评论数
  23. 4.文章分类表:
  24. 字段:
  25.         name:分类名
  26. 5.文章标签表:
  27. 字段:
  28.         name:标签名
  29. 6.点赞点踩表:记录了哪个用户给哪个文章点赞还是点踩
  30. 字段:
  31.         user:用户主键值  ForeignKey(to='UserInfo')
  32.         article:文章主键值 ForeignKey(to='Article')
  33.         is_up:是否点赞(布尔值字段类型)
  34.         is_down:是否点踩(布尔值字段类型)
  35. 7.评论表:记录哪个用户给哪个文章评论了什么内容
  36. 字段:
  37.         user:用户 ForeignKey(to='UserInfo')
  38.         article:文章 ForeignKey(to='Article')
  39.         content:评论内容
  40.         comment_time:评论时间
  41.         # 评论内容有跟评论和子评论的区别,跟评论是直接评论文章的,子评论是评论跟评论的
  42.         parent:自关联  ForeignKey(to='Comment',null=True) to里面也可以写成self表示自己关联自己
  43. """
复制代码
七张表之间的关系
  1. 1.用户表和个人站点表:一对一关系,外键建在用户表
  2. 2.个人站点表和文章标签表:一对多关系,外键建在文章标签表
  3. 3.个人站点表和文章分类 表:一对多关系,外键建在文章分类表
  4. 4.个人站点和文章表:一对多关系,外键建在文章表
  5. 5.文章表和文章标签表:多对多关系,外键建在文章表
  6. 6.文章表和文章分类表:一对多关系,外键建在文章分类表
复制代码
接下来,我们就可以在models.py里创建对应的表了!
bbs项目表创建源码
  1. from django.db import models
  2. from django.contrib.auth.models import AbstractUser
  3. # Create your models here.
  4. # 1、用户表:继承AbstractUser类,需要先导入这个类
  5. class UserInfo(AbstractUser):
  6.     phone = models.BigIntegerField(verbose_name='电话',null=True)
  7.     avatar = models.FileField(upload_to='avatar/',default='avatar/default.png',verbose_name='头像')
  8.     """
  9.     给avatar字段传文件对象,该文件会自动保存到upload_to='avatar/'指定的文件夹下,这个文件夹需要自己在项目文件夹下创建
  10.     数据库里的avatar字段只保存文件路径,同时可以设置一个默认头像
  11.     """
  12.     create_time = models.DateTimeField(auto_now_add=True,verbose_name='创建时间')
  13.     # 用户表与个人站点表一对一关系,外键建在用户表
  14.     blog = models.OneToOneField(to='Blog',on_delete=models.CASCADE,null=True)
  15. # 2、个人站点表
  16. class Blog(models.Model):
  17.     site_name = models.CharField(verbose_name='站点名称',max_length=64)
  18.     site_title = models.CharField(verbose_name='站点标题',max_length=64)
  19.     site_theme = models.CharField(verbose_name='站点主题',max_length=256) # 存的是css、js样式的路径
  20. # 3、文章表
  21. class Article(models.Model):
  22.     title = models.CharField(verbose_name='文章标题',max_length=64)
  23.     desc = models.CharField(verbose_name='文章摘要',max_length=256)
  24.     content = models.TextField(verbose_name='文章内容')
  25.     create_time = models.DateTimeField(verbose_name='创建时间',auto_now_add=True)
  26.     # 数据库字段设计优化
  27.     up_num = models.IntegerField(verbose_name='点赞数',default=0)
  28.     down_num = models.IntegerField(verbose_name='点踩数',default=0)
  29.     comment_num = models.IntegerField(verbose_name='评论数',default=0)
  30.     # 个人站点表和文章表一对多关系,外键建在文章表
  31.     blog = models.ForeignKey(to='Blog',on_delete=models.CASCADE,null=True)
  32.     # 文章表和文章分类表是一对多关系,外键建在文章表
  33.     category = models.ForeignKey(to='Category',null=True,on_delete=models.CASCADE)
  34.     # 多对多关系表的外键
  35.     tag = models.ManyToManyField(to='Tag',through='Article2Tag',through_fields=('article','tag'))
  36.     # 通过Article2Tag这个张表查article就把Article2Tag里的article字段放前面
  37. # 文章表和标签表的多对多表创建,采用的是半自动的方式,利用扩展自动和查询
  38. class Article2Tag(models.Model):
  39.     article = models.ForeignKey(to='Article',null=True,on_delete=models.CASCADE)
  40.     tag = models.ForeignKey(to='Tag',null=True,on_delete=models.CASCADE)
  41. # 4、文章分类表
  42. class Category(models.Model):
  43.     name = models.CharField(verbose_name='分类名',max_length=32)
  44.     # 个人站点表和文章分类表是一对多关系,外键建在文章分类表
  45.     blog = models.ForeignKey(to='Blog',null=True,on_delete=models.CASCADE)
  46. # 5、文章标签表
  47. class Tag(models.Model):
  48.     name = models.CharField(verbose_name='标签名',max_length=32)
  49.     # 个人站点表和文章标签表是一对多关系,外键建在文章标签表
  50.     blog = models.ForeignKey(to='Blog',null=True,on_delete=models.CASCADE)
  51. # 6、点赞点踩表
  52. class UpAndDown(models.Model):
  53.     user = models.ForeignKey(to='UserInfo',on_delete=models.CASCADE)
  54.     article = models.ForeignKey(to='Article',on_delete=models.CASCADE)
  55.     is_up = models.BooleanField()
  56.     is_down = models.BooleanField()
  57. # 7、评论表
  58. class Comment(models.Model):
  59.     user = models.ForeignKey(to='UserInfo',on_delete=models.CASCADE)
  60.     article = models.ForeignKey(to='Article',on_delete=models.CASCADE)
  61.     content = models.CharField(verbose_name='评论内容',max_length=256)
  62.     create_time = models.DateTimeField(verbose_name='评论时间',auto_now_add=True)
  63.     # 子评论,自关联
  64.     parent = models.ForeignKey(to='self',on_delete=models.CASCADE)
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

郭卫东

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表