BBS数据库设计

一、BBS数据库设计

# models.py
from django.db import models # Create your models here.
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser):
"""用户信息 blank=True) # blank告诉django admin后台管理 该字段可以为空 """
phone = models.BigIntegerField(null=True, blank=True) # 用户手机号 # upload_to 该字段用来存放用户上传头像的文件路径, 用户上传头像会自动放到avatar文件夹下面
avatar = models.FileField(upload_to='avatar', default='avatar/default.png') # 用户头像 create_time = models.DateField(auto_now_add=True) # 创建时间 # 用户表与个人站点是一对一的关系
blog = models.OneToOneField(to='Blog', null=True) class Meta:
# 会在表名后面添加s
# verbose_name = '用户表'
verbose_name_plural = '用户表UserInfo' def __str__(self):
return self.username class Blog(models.Model):
"""个人站点"""
site_name = models.CharField(max_length=55) # 站点名称
site_title = models.CharField(max_length=66) # 站点标题
# 存css. js 文件路径用于模板样式
site_theme = models.CharField(max_length=200) # 站点模板样式 class Meta:
# 会在表名后面添加s
# verbose_name = '用户表'
verbose_name_plural = '个人站点Blog' def __str__(self):
return self.site_name class Category(models.Model):
"""分类"""
name = models.CharField(max_length=32) # 分类名称 # 个人站点与分类是一对多的关系
blog = models.ForeignKey(to='Blog', null=True) # 设置外键 class Meta:
# 会在表名后面添加s
# verbose_name = '用户表'
verbose_name_plural = '分类表Category' def __str__(self):
return self.name class Tag(models.Model):
"""标签"""
name = models.CharField(max_length=32) # 标签名称 # 个人站点与分类是一对多的关系
blog = models.ForeignKey(to='Blog', null=True) # 设置外键 class Meta:
# 会在表名后面添加s
# verbose_name = '用户表'
verbose_name_plural = '标签Tag' def __str__(self):
return self.name class Article(models.Model):
"""文章信息"""
title = models.CharField(max_length=64) # 文章标题
desc = models.CharField(max_length=255) # 描述信息 content = models.TextField() # 存放大文本字段
create_time = models.DateField(auto_now_add=True) # 创建时间 # 数据库优化,可以采用向表中添加需要的额外字段
comment_num = models.BigIntegerField(default=0) # 评论数据量
up_num = models.BigIntegerField(default=0) # 点赞个数
down_num = models.BigIntegerField(default=0) # 点彩个数 # 外键字段 # 个人站点和文章是一对多的关系
blog = models.ForeignKey(to='Blog', null=True) # 分类和文章是一对多的关系, 一篇文章只能在一个分类下面,
category = models.ForeignKey(to='Category', null=True) # 标签和文章是多对多的关系, 一片文章可以有多个标签对他进行定义
# 第三张表可以添加额外的字段 创建的第三张表 在那个表中创建关系谁就在前面
tag = models.ManyToManyField(to='Tag', through='ArticleTag', through_fields=('article', 'tag')) # 可以天机 class Meta:
# 会在表名后面添加s
# verbose_name = '用户表'
verbose_name_plural = '文章Article' def __str__(self):
return self.title class ArticleTag(models.Model):
"""文章和标签的关系是多对多的关系"""
article = models.ForeignKey(to='Article')
tag = models.ForeignKey(to='Tag') class Meta:
# 会在表名后面添加s
# verbose_name = '用户表'
verbose_name_plural = '多对多ArticleTag' class UpAndDown(models.Model):
"""
点赞,点彩表
一张表中的一条数据能否对应另外一张表的多条数据
另外一张表的一条数据能够对应当前的表多条件
user_id article_id is_up
1 1 1
1 2 0
1 3 1
2 1 1
"""
# 表关系
# 用户和点赞点彩表是一对多关系
user = models.ForeignKey(to='UserInfo')
# 文章和点赞点彩表是一对多关系
article = models.ForeignKey(to='Article') # 是否点赞或点彩
is_up = models.BooleanField() # 点赞,还是点彩 class Meta:
# 会在表名后面添加s
# verbose_name = '用户表'
verbose_name_plural = '点赞UpAndDown' def __str__(self):
return self.is_up class Comment(models.Model):
# 表之间关系
# 用户表和评论是一对多的关系
user = models.ForeignKey(to='UserInfo') # 文章和评论是一对多的关系?
article = models.ForeignKey(to='Article') content = models.CharField(max_length=255)
create_time = models.DateTimeField(auto_now_add=True) # 添加外键字段, 一对多评论表 自关联 在评论时候可能会有子评论
parent = models.ForeignKey(to='self', null=True) class Meta:
# 会在表名后面添加s
# verbose_name = '用户表'
verbose_name_plural = '评论Comment' # def __str__(self):
# return self.is_up

二、Django后台管理数据

from django.contrib import admin
from app01 import models
# Register your models here. # 将表注册在后台
admin.site.register(models.UserInfo)
admin.site.register(models.Blog)
admin.site.register(models.Category)
admin.site.register(models.Tag)
class ArticleConfig(admin.ModelAdmin):
list_display = ['title','create_time'] # 配置展示字段
list_display_links = ['title','create_time'] # 指定多个跳转标签
search_fields = ['title'] # 指定查询 多个字段默认是or的关系 def patch_init(self,queryset):
pass
patch_init.short_description = '批量更新'
actions = [patch_init,] # 自定义批量处理函数 list_filter = ['tags','category'] # 定义外键字段的过滤 admin.site.register(models.Article,ArticleConfig)
admin.site.register(models.Article2Tag)
admin.site.register(models.Comment)
admin.site.register(models.UpAndDown)

BBS数据库设计的更多相关文章

  1. 小福bbs—项目系统设计与数据库设计

    这个作业属于哪个课程 班级链接 这个作业要求在哪里 作业要求的链接 团队名称 小福bbs 这个作业的目标 实现对校园论坛软件的制作,使其能够发布帖子,查看信息等 作业的正文 小福bbs--项目需求分析 ...

  2. ylbtech-QQ(腾讯)-群空间-数据库设计

    ylbtech-DatabaseDesgin:ylbtech-QQ(腾讯)-群空间-数据库设计 DatabaseName:QQ-群空间 Model:群相册.群共享.群论坛.群成员.留言板.公告.6个模 ...

  3. 使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)

    使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源) 先直接上程序界面,了解整体工作流程是什么样子的,求服务器进行挂机测试,需要固定IP,空间大概需要10G左右(主要是BT种子占用空间 ...

  4. 一般软件开发流程和BBS表设计

    项目开发流程 需求分析 架构师+产品经理+开发组组长 和客户公司谈需求之前 ,事先需要想一下这个项目要怎么做 里面的坑点提前想好比较简单的解决方案 在跟客户谈的时候有意识的引导客户朝你已经想好的方案上 ...

  5. 数据库设计中的Soft Delete模式

    最近几天有点忙,所以我们今天来一篇短的,简单地介绍一下数据库设计中的一种模式——Soft Delete. 可以说,该模式毁誉参半,甚至有非常多的人认为该模式是一个Anti-Pattern.因此在本篇文 ...

  6. 使用django开发博客过程记录1——数据库设计

    1.数据库设计 2.插入测试数据 3.配置相关问题 1.数据库设计 数据库有简单的三张表:Article.Category.Tag以下是代码 # -*- coding:utf-8 -*- from _ ...

  7. 基于SSM的租赁管理系统0.3_20161225_数据库设计

    数据库设计 1. 概念模型 2. 类模型 3. 生成SQL use test; /*========================================================== ...

  8. 第二天ci项目规划 数据库设计

    第二天ci项目规划 数据库设计 商品 + 用户 + 订单 数据库设计思想和方法 关于商品品牌 ,分类 ,属性 如何表示 用一个字段 还是再设计一张表 品牌和商品 是一种信息 还是两种信息 一张表一般只 ...

  9. 优化MySchool数据库设计之【巅峰对决】

    优化MySchool数据库设计 之独孤九剑 船舶停靠在港湾是很安全的,但这不是造船的目的 By:北大青鸟五道口原玉明老师 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识 ...

随机推荐

  1. 2018出炉50道iOS面试题

    基础: 1.如何令自己所写的对象具有拷贝功能? 若想令自己所写的对象具有拷贝功能,则需实现 NSCopying 协议.如果自定义的对象分为可变版本与不可变版本,那么就要同时实现 NSCopying与 ...

  2. stringutil stringutils

    org.apache.commons.lang.StringUtils类是用于操作Java.lang.String类的,而且此类是null安全的,即如果输入参数String为null,则不会抛出Nul ...

  3. python 变量搜寻顺序法则LEGB之E注意事项

    众所周知,在python中,变量不需要事先声明,赋值后,即可调用使用.而调用的法则遵从LEGB法则,其中L为local,E为enclosing,G为Global,B为built-in,即变量首先在局部 ...

  4. hive的join优化

    “国际大学生节”又称“世界大学生节”.“世界学生日”.“国际学生日”.1946年,世界各国学生代表于布拉格召开全世界学生大会,宣布把每年的11月17日定为“世界大学生节”,以加强全世界大学生的团结和友 ...

  5. 51nod 1080:两个数的平方和

    1080 两个数的平方和 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给出一个整数N,将N表示为2个整数i j的平方和(i <= j),如果 ...

  6. JavaSE--java是值传递还是引用传递

    引用是已定义的变量的别名. 按引用传递就是一个变量使用两个名称. 两个变量在内存中的地址都是一样的. 按值传递, 传递的是值的拷贝. C++中可以通过传引用来改变传入的参数的值.在C++中可以通过以下 ...

  7. Java多线程之并发包,并发队列

    目录 1 并发包 1.1同步容器类 1.1.1Vector与ArrayList区别 1.1.2HasTable与HasMap 1.1.3 synchronizedMap 1.1.4 Concurren ...

  8. C#调用C++系列二:传结构体

    这一篇记录下C#调用C++的结构体的方式来使用OpenCV的数据格式,这里会有两种方式,第一种是C#传一个结构体和图像的路径给C++,然后C++将图像加载进来,再把传进来的结构体填满即可,第二种是C# ...

  9. 文献阅读报告 - Pedestrian Trajectory Prediction With Learning-based Approaches A Comparative Study

    概述 本文献是一篇文献综述,以自动驾驶载具对外围物体行动轨迹的预测为切入点,介绍了基于运动学(kinematics-based)和基于机器学习(learning-based)的两大类预测方法. 并选择 ...

  10. winform操作windows系统计算器

    winform对系统计算器的调用,启动,最大化最小化显示,在mainwindow设置topmost=true时,正常显示计算器并置顶. /// <summary> /// 获取窗体的句柄函 ...