BBS需求分析和orm设计
一.BBS博客需求分析
首页(现实文章)
文章详情
点赞
文章评论(子评论,评论的展示)
登录功能(图片验证码)
注册功能(基于form验证)
个人站点(不同人不同样式,文章过滤)
后台管理(文章展示)
新增文章(富文本编辑器)
二.ORM模型设计
需要创建的表
用户信息表-----UserInfo
个人站点表-----Blog
分类表--------Category
标签表--------Tag
文章表--------Article
文章与标签的关联表---ArticleToTag
点赞点踩表-----UpAndDown
文章评论表-----Commit
表与表之间的关联关系
UserInfo --- 一对一 ---Blog
Blog --- 一对多 --- Category
Blog --- 一对多 --- Tag
Article --- 一对多 --- UserInfo
Article --- 一对多 --- Category
Article --- 多对多 --- Tag
UpAndDown --- 一对多 --- UserInfo
UpAndDown --- 一对多 --- Article
Commit --- 一对多 --- UserInfo
Commit --- 一对多 --- Article
子评论关联Commit自身
三.配置文件
配置需要使用的数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day86_BBS',
'PORT': 3306,
'HOST': '127.0.0.1',
'USER': 'root',
'PASSWORD': '970420',
}
}
扩展默认的auth_user表的配置
AUTH_USER_MODEL = 'app名.表名'
根路由配置
STATIC_URL= '/login/'
静态文件配置
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
四.创建表模型
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class Blog(models.Model):
'''
个人站点表
'''
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=64, verbose_name='站点标题')
site_name = models.CharField(max_length=64, verbose_name='站点名称')
theme = models.CharField(max_length=255, verbose_name='站点样式')
class UserInfo(AbstractUser):
'''
用户表
'''
phone = models.CharField(max_length=32, verbose_name='手机号', null=True)
avatar = models.FileField(upload_to='avatar/', default='/avatar/default.png', verbose_name='用户头像', null=True)
create_data = models.DateField(auto_now_add=True, verbose_name='创建时间')
blog = models.OneToOneField(to='Blog')
class Category(models.Model):
'''
文章类别表
'''
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=32, verbose_name='类别名')
blog = models.ForeignKey(to=Blog, null=True)
class Tag(models.Model):
'''
文章标签表
'''
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=32, verbose_name='标签名')
blog = models.ForeignKey(to=Blog, null=True)
class Article(models.Model):
'''
文章表
'''
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=64, verbose_name='文章标题')
desc = models.CharField(max_length=255, verbose_name='摘要')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='发表时间')
content = models.TextField(verbose_name='文章内容')
# 关联关系
category = models.ForeignKey(to='Category', null=True)
tag = models.ManyToManyField(to='Tag', through='ArticleToTag', through_fields=('article', 'tag'))
blog = models.ForeignKey(to='Blog', null=True)
class ArticleToTag(models.Model):
'''
手动创建的文章关联标签表
'''
id = models.AutoField(primary_key=True)
article = models.ForeignKey(to='Article')
tag = models.ForeignKey(to='Tag')
class Commit(models.Model):
'''
评论表
'''
id = models.AutoField(primary_key=True)
user = models.ForeignKey(to='UserInfo')
article = models.ForeignKey(to='Article')
content = models.CharField(max_length=255, verbose_name='评论内容')
commit_time = models.DateTimeField(auto_now_add=True)
# 自关联
# parent = models.ForeignKey(to='Commit',null=True)
parent = models.ForeignKey(to='self', null=True)
# 联合唯一,防止写脏数据
class Meta:
unique_together = (('user', 'article'),)
class UpAndDown(models.Model):
'''
点赞点踩表
'''
id = models.AutoField(primary_key=True)
user = models.ForeignKey(to='UserInfo')
article = models.ForeignKey(to='Article')
is_up = models.BooleanField()
class Meta:
unique_together = (('user', 'article'),)
五.生成5位随机验证码
from django.shortcuts import render, HttpResponse
from PIL import Image, ImageDraw, ImageFont
import random
from io import BytesIO
# 生成随机颜色
def get_color():
return (
random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)
)
# 生成随机数
def get_number(n):
res = ''
for i in range(n):
C = chr(random.randint(65, 90))
c = chr(random.randint(97, 122))
num = random.randint(0, 9)
res += random.choice([C, c, str(num)])
return res
def get_code(request):
# 生成图片对象
img = Image.new('RGB', (174, 35), color=get_color())
# 生成画笔对象
img_draw = ImageDraw.Draw(img)
# 生成字体对象,第一参数字体文件路径,第二个参数字体大小
font = ImageFont.truetype('static/font/ss.TTF', 25)
# 获取随机文本内容
res = get_number(5)
# print(res)
# 使用画笔工具,对图片对象写入文本
# text方法第一个参数为文本在图片的坐标,第二个参数是文本内容,第三个参数是文本颜色,第四个参数是文本字体
img_draw.text((35, 0), res, get_color(), font)
# 将随机文本内容保存到session
res = res.lower()
request.session['code_text'] = res
# 在内存中生成一个空文件
f = BytesIO()
# 将图片放入内存,存取快,且会自动清理
img.save(f, 'png')
# 获得图片数据
data = f.getvalue()
return HttpResponse(data)
BBS需求分析和orm设计的更多相关文章
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-3.在线教育站点需求分析和架构设计
笔记 3.在线教育站点需求分析和架构设计 简介:分析要开发的功能点和系统架构应该怎样架构 1.开发的功能: 首页视频列表 ...
- 扩展auth_user字段、BBS需求分析、创建BBS数据库、注册页面搭建与用户头像展示及Ajax提交数据
昨日内容回顾 csrf跨站请求 1. SQL注入 2. xss攻击 3. csrf跨站请求 4. 密码加密(加盐) '''django中默认有一个中间件来验证csrf''' # 只针对post请求才验 ...
- 2014-08-04 BBS主页页面的设计
今天是在吾索实习的第19天.这天,开始参照一开始设计的界面原型,真真正正地进行BBS界面的设计.在运用.NET进行界面设计时,发现没有用RP进行界面设计来得容易,很多都要再进行更精细的操作,才能达到原 ...
- MVC实战之排球计分(一)—— 需求分析与数据库设计
此系列博客目的是制作一款排球计分程序.这系列博客讲讲述此软件的 各个功能的设计与实现. 一.需求分析: 这个程序是排球计分程序,其业务非常简单,具体如下: 1.本程序可以选择用户身份,通过不同角度记录 ...
- 团队作业2 <嗨,你的快递!>需求分析与原型设计
哦,不,是你的快速(*_*) 第一部分 需求分析 1.1 用户调研 1.1.1调研对象:由于我们的系统是校园快递代取业务,面向的是大学生活,所以本次调研范围都是在校大学生(除了师大学生,也包括了外校的 ...
- ssm+RESTful bbs项目后端主要设计
小谈: 帖主妥妥的一名"中"白了哈哈哈.软工的大三狗了,也即将找工作,怀着丝丝忐忑接受社会的安排.这是第一次写博客(/汗颜),其实之前在学习探索过程中,走了不少弯路,爬过不少坑.真 ...
- [开发笔记usbTOcan]软件需求分析和软件架构设计
前面文章进行了系统分析和系统架构设计,手工焊接了一个板子,集合EK-TMC123GXL开发板(请忽略焊接技术) SWE.1 | 软件需求分析 软件需求分析过程的目的是将系统需求的软件相关部分转化为一组 ...
- 浅谈python web框架中的orm设计
看了一下廖雪峰的那个web框架,其实就是封装了web.py,请求使用异步并将aiomysql做为MySQL数据库提供了异步IO的驱动,前端部分则整合了jinja.其中最难的应该是orm部分了. 下面是 ...
- AI产品经理工作流程——需求分析和产品设计
1.AI产品设计常见失败原因 技术驱动产品设计,即我有什么技术就做什么产品.尽管许多公司不惜重金招聘高级AI算法工程师,确实这样也能帮助企业拿到大量的融资,但也容易给公司带来技术决定产品设计的局限.然 ...
随机推荐
- 断电后gitlab报500错误启动出错
异常断电后,gitlab报500错误,重启无效 通过sudo gitlab-ctl reconfigure启动时, 提示 [execute] pgsql:could not connect to se ...
- 启用mysql日志记录执行过的sql
在mysql命令行或者客户端管理工具中执行:SHOW VARIABLES LIKE "general_log%"; 结果: general_log OFF general_log_ ...
- CentOS&.NET Core初试-4-安装守护服务(Supervisor)
系列目录 CentOS的安装和网卡的配置 安装.NET Core SDK和发布网站 Nginx的安装和配置 安装守护服务(Supervisor) Supervisor是什么? Supervisor 是 ...
- c# 引用类型对象的深拷贝
c#中的对象大体分为值类型和引用类型,值类型大致包括 int, struct等,引用类型大致包括 自定义Class,object 等.string属于特殊的引用类型,不在本文的讨论之内. 值类型直接存 ...
- 安装orcle服务器端后,不需要安装客户端,可通过plsql登录
用PL/SQL连接oracle数据库,不管是本地的还是远程的,一般都需要安装oracle客户端(500M左右)比较大,而且在各个系统上安装也有些讲究,需要修改相应配置文件,有点麻烦,像平时开发时候,我 ...
- C#编写运行在Linux环境下的采用Mediainfo来获取多媒体文件信息的代码
项目开始设计的是运行在windows下,所以一开始采用的是windows服务模式来获取多媒体文件信息,后来要求调整为可以在Linux下运行,经过这两天的资料查找,实现了Linux下通过.NET来获取多 ...
- link 标签中“rel=stylesheet”的作用
最近在复习我的培训项目学子商城项目的时候在引入外部css的时候忘记加上了rel=stylesheet(因为以前看别人给的模板有所以就加了上去,所以并没有太大印象) 那rel=stylesheet到底起 ...
- Ubuntu 18.04上搭建FTP服务器
1.准备工作需要安装并运行的Ubuntu Server 18.04系统.当然还需要一个具有sudo权限的账号. 2.安装VSFTPVSFTP程序位于标准存储库中,因此可以使用单个命令删除安装.打开终端 ...
- volatile和synchronized与lock的理解
volatile 特征: a:可见性:一个线程修改了某个共享变量的值,其他线程能够立马得知这个修改. b:禁止特定的处理器重排序. volatile的内存语义: 1.当写一个volatile变量的时候 ...
- PHP面向对象的基本原则
对象内部是高内聚的 ——对象只负责一项特定的功能(职能可大可小) ——所有对象相关的内容都封装到对象内部 高内聚就是该有的都有,用的时候不会缺胳膊少腿! 对象对外是低耦合的 ——外部世界可以看到对象的 ...