BBS项目需求分析及表格创建
1.项目需求分析
1.登陆功能(基于ajax,图片验证码)
2.注册功能(基于ajax,基于forms验证)
3.博客首页
4.个人站点
5.文章详情
6.点赞,点踩
7.评论
--根评论
--子评论
8.后台管理
--文章展示
--新增文章
9.发布文章
二.项目表格创建
1.需要创建的表格
用户信息表 ------UserInfo
个人站点表-------Blog
分类表 -------Category
标签表 --------Tag
文章表 --------Article
文章和标签之间的第三张表,也可自己创建 ------Article2Tag
点赞点踩表 ---ArticleUpDown
文章评论表 ----Comment
2.表格之间的关联关系
UserInfo 一对一 Blog
Blog 一对多 Category
Blog 一对多 Tag
Article 一对多 UserInfo
一对多 Category
多对多 Tag
Article2Tag 一对多 Article
一对多 Tag
ArticleUpDown 一对多 UserInfo
一对多 Article
Comment 一对多 UserInfo
一对多 Article
自关联 ForeignKey对象是自己
3.表格应有的字段
UserInfo nid telephone avatar create_date blog 其他的继承的AbstractUser自动帮忙创建
Blog nid title site_name theme
Category nid blog title
Tag nid title blog
Article nid title desc content create_date comment_num up_num down_num user category tag
Article2Tag nid article tag
ArticleUpDown nid article user is_up
Comment nid article user comm create_date parent_comment
4.建表一些需要注意的点:-------这里只列出需要注意的点,原因在文件里都有备注。
4.1 UserInfo表需要继承AbstractUser,为了应用auth。
4.2 创建avatar字段调用FileField类,里面传入参数upload_to和default的意义。
4.3 创建crete_date需要调用DateTimeField,里面需要传入auto_now_add的意义
4.4 2.0版本级联删除的问题 on_delete = models.CASCADE
4.5 CharField参数verbose_name的意思。
4.6 外键to加引号和不加引号的区别
4.7 创建文本内容字段需要用TextField
4.8 两个表之间是多对多关系,第三张表可以自定义因为有时会有在第三张表添加新字段的需求。
如果自定义第三张表需要在其中一个表参数里指定through和through_fields。
最全BBS表格创建及涉及到的配置
settings里涉及到创建表和初始数据库的配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': 3306,
'NAME': 'bbs2',
'USER': 'root',
'PASSWORD': ''
}
# 这儿一定要写 ,找了半天才发现!!!必须在创建表之前写上,不然会报错。
# 而且表格创建完成后再加上,makemigrations是不支持的
AUTH_USER_MODEL='bbs.UserInfo' # 根路由,只有在模板里能用到 和media_url用法相似 开的url只是为了让django识别 名字可以随意命名
# static_url映射static_root
STATIC_URL = '/static/'
# 创建多个app我们可能需要在不同app下创建static文件,如果几个app下需要用到同一个静态文件,就会出现浪费加载时间
# 所以为了方便管理和提高加载效率,我们把一些常用的静态文件放在一个根路径下。STATICFILES_DIRS指定额外的静态文件
# 存储位置
# 别人不能直接访问静态文件 如果别人直接输入你的静态文件地址是不能访问的
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
models创建表
from django.db import models
from django.contrib.auth.models import AbstractUser # 自动创建的id,不知道能不能用to_field指定
# 只要BBS上有的数据你都要存放到表里,对应到不同的表,做好关联。
# Create your models here.
# 这里要继承AbstractUser,应用auth模块。
# id不需要手动去创建,orm会自动帮你创建
class UserInfo(AbstractUser):
id = models.AutoField(primary_key=True)
# 这些创建表的类都是models里面封装好的,直接models.类名调用
telephone = models.CharField(max_length=32)
# FileField里面参数:verbose_name=None, name=None, upload_to='', storage=None, **kwargs
# verbose_name的意思很简单,就是给你的模型类起一个更可读的名字,一般定义为中文
# 文件流是不会放到数据库里面的,该字段在数据库中只存储路径,django提供了upload_to属性 ,
# upload_to设定上传文件的存储目录和名称。初始默认路径下的设定图片
avatar = models.FileField(upload_to='avatar/', default='avatar/default.png')
# auto_now和auto_now_add。两者默认值都为False。auto_now = True 实例化字段会自动保存当前时间,无法手动添加非当前时间
# auto_now_add 可以手动添加非当前时间
create_date = models.DateTimeField(auto_now_add=True)
blog = models.OneToOneField(to='Blog', to_field='id', null=True) # 其他的都要继承django预设的类models.Model
class Blog(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=32, verbose_name='博客标题')
# 站点名称
site_name = models.CharField(max_length=32, verbose_name='站点名称')
# 博客主题样式
theme = models.CharField(max_length=32, verbose_name='博客主题样式') def __str__(self):
return self.title class Category(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=32)
# 软关联两张表,相当于只设置了逻辑上的关联db_constraint=False
# db_constraint = False没有外键约束,有外键约束,是为了不写脏数据
blog = models.ForeignKey(to='Blog', to_field='id', null=True) def str(self):
return self.title class Tag(models.Model):
id = models.AutoField(primary_key=True)
# 标签名称
title = models.CharField(max_length=32)
# 所属博客
blog = models.ForeignKey(to="Blog", to_field='id', null=True) def __str__(self):
return self.title class Article(models.Model):
id = models.AutoField(primary_key=True)
# 文章标题
title = models.CharField(max_length=32)
# 文章摘要
desc = models.CharField(max_length=255)
# 存大文本 文章内容
content = models.TextField()
create_date = models.DateTimeField(auto_now_add=True)
# 默认为0
comment_num = models.IntegerField(default=0)
up_num = models.IntegerField(default=0)
down_num = models.IntegerField(default=0)
user = models.ForeignKey(to='UserInfo', to_field='id', null=True)
category = models.ForeignKey(to='Category', to_field='id', null=True)
# 手动创建多对多的第三张表 为了方便添加一些字段
# 通过through指定自己写的中间表
tag = models.ManyToManyField(to='Tag', through='Article2Tag', through_fields=('article', 'tag')) # 自己创建中间表,add(),remove(),set()不能用了
class Article2Tag(models.Model):
id = models.AutoField(primary_key=True)
# 文章id 外键关联 自动帮忙在字段后面加上id
article = models.ForeignKey(to='Article', to_field='id', null=True)
# 标签id
tag = models.ForeignKey(to='Tag', to_field='id', null=True) class ArticleUpDown(models.Model):
id = models.AutoField(primary_key=True)
# 用户不能为空
user = models.ForeignKey(to='UserInfo', to_field='id')
# 点赞/点踩 的文章
article = models.ForeignKey(to='Article', to_field='id', null=True)
# 赞还是踩
is_up = models.BooleanField(default=True) class Comment(models.Model):
id = models.AutoField(primary_key=True)
# 评论的用户
user = models.ForeignKey(to='UserInfo', to_field='id')
# 评论的文章
article = models.ForeignKey(to='Article', to_field='id')
# 评论的内容
comm = models.CharField(max_length=255)
# 评论的时间
create_date = models.DateTimeField(auto_now_add=True)
# 两种写法 to = 'self'
# parent_comment=models.ForeignKey(to='Comment',to_field='nid')
# 父评论的id,自关联,防止写脏数据
parent_comment = models.ForeignKey(to='self', to_field='id', null=True)
BBS项目需求分析及表格创建的更多相关文章
- 小福bbs——项目需求分析
# 一.简单了解 这个作业属于哪个课程 班级链接 这个作业要求在哪里 作业要求的链接 团队名称 小福bbs 这个作业的目标 第一个版本,根据项目预期情况形成 作业的正文 小福bbs--项目需求分析 其 ...
- 小福bbs—项目系统设计与数据库设计
这个作业属于哪个课程 班级链接 这个作业要求在哪里 作业要求的链接 团队名称 小福bbs 这个作业的目标 实现对校园论坛软件的制作,使其能够发布帖子,查看信息等 作业的正文 小福bbs--项目需求分析 ...
- BBS项目详解(forms快速创建登陆页面,登陆验证、通过阅读器进行头像上传的预览、内存管理器)
BBS项目涉及的知识点 django中知识点 钩子函数(局部钩子和全局钩子) 1.局部钩子就是用来做合法性校验,比如用户名有没有被使用等 2.全局的就是用来做对比校验,比如两次输入的密码是否一致 3. ...
- BBS项目-01
目录 BBS项目 BBS开发流程: BBS表格创建: BBS项目 BBS开发流程: BBS项目: 开发流程: 需求分析 草拟一些项目的大致技术点和流程 架构设计 架构师(框架 语言 数据库 缓存数据库 ...
- auth复习和BBS项目的登录(1)
auth复习 auth组件 验证:authenticate(request,username='andy',password='123) 登录:login(request,user) 注销:login ...
- python 自动化之路 day 20 Django进阶/BBS项目【一】
一.django进阶 1.django orm 增删改查 1.1.创建表: 1 2 3 >>> from blog.models import Blog >>> b ...
- BBS项目(一)
目录 BBS项目(一) 项目开发流程 BBS项目 BBS表分析 自关联 表关系图示 BBS项目(一) 项目开发流程 项目分类 针对互联网用户:抖音,淘宝····· 针对公司内部:后台管理系统··· 针 ...
- BI项目需求分析书-模板
目录 目录 .............................................................................................. ...
- 《Miracle-House团队》项目需求分析改进
(一)团队项目需求分析改进 一.<西小餐项目需求规格说明书>的不足 通过老师和其他同学的指正和建议,我们发现上次的需求规格说明书存在以下不足: 1.需求规格文档不够完整和规范: 2.系统设 ...
随机推荐
- zookeeper入门到精通
- [AH2017/HNOI2017]抛硬币
传送门 这个题的暴力比较好想--然后用一些组合的知识就可以变成正解了. 首先我们考虑a=b的情况.我们把扔出来的硬币看成是一个01序列,那么对于一个b获胜的序列,他在每一位都按位异或1之后必然是一个a ...
- ceph部署与问题
一.基本情况:物理设备:4台惠普dl360,4个千兆网卡 4个1T盘操作系统统一为:CentOS 7.2.1511ceph版本:10.2.3ceph-deploy版本:1.5.36网络情况:192.1 ...
- 1--redis3.0.5集群部署安装详细步骤
Redis集群部署文档(centos6系统) (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) ...
- int和Integer及拆箱与装箱
int和Integer 如果面试官问Integer与int的区别:估计大多数人只会说道两点,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null.但是如果面试官再问一下In ...
- A - Alyona and Numbers
Description After finishing eating her bun, Alyona came up with two integers n and m. She decided to ...
- 技术胖Flutter第四季-24Flutter的打包
视频地址: https://www.bilibili.com/video/av35800108/?p=25 文章地址: https://jspang.com/post/flutter4.html#to ...
- Flutter实战视频-移动电商-31.列表页_列表切换交互制作
31.列表页_列表切换交互制作 博客地址:https://jspang.com/post/FlutterShop.html#toc-c42 点击左侧的大类右边的小类也跟着变化 新建provide 要改 ...
- 别用visual editor了,用WindowBuilder
以前利用 Eclipse Visual Editor 项目构建 GUI,现在用WindowBuilder吧. 官网说: The Visual Editor project has been archi ...
- 为何在有 DOCTYPE 的 HTML 文档之上仍然还会出现混杂模式?
不使用 DOCTYPE 一定会使 HTML 文档处于混杂模式,然而使用了 DOCTYPE,也不一定就能够使文档在所有浏览器中均处于标准模式. DOCTYPE 本身不就是一个“开关”吗?为何在有 DOC ...