django之BBS需求分析和orm设计-71

一.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)

posted on 2018-12-27 21:47 漫天飞雪世情难却 阅读(...) 评论(...)  编辑 收藏

转载于:https://www.cnblogs.com/jokezl/articles/10187625.html

django之BBS需求分析和orm设计-71相关推荐

  1. 基于.NET平台的分层架构实战(二)——需求分析与数据库设计

    基于.NET平台的分层架构实战(五)--接口的设计与实现 · 基于.NET平台的分层架构实战(四)--实体类的设计与实现 · 基于.NET平台的分层架构实战(三)--架构概要设计 · 基于.NET平台 ...

  2. Django框架(三)—— orm增删改查、Django生命周期

    orm增删改查.Django生命周期 一.orm介绍 1.什么是orm ORM即Object Relational Mapping,全称对象关系映射. 2.使用orm的优缺点 优点: 不用写SQL语句 ...

  3. 结队项目之需求分析与原型设计

    结队项目之需求分析与原型设计 结对者:3011 卢凯欣    3034 戚景晓 一.需求分析(NABCD模型) 1.N(Need,需求) 游戏玩家可以以游客的身份游览游戏界面. 玩家可以注册登录,在玩 ...

  4. 《大话软件工程—需求分析与软件设计》,给出了分析与设计过程中需要的理论、方法、工具和标准

    □ 做好一款软件从哪里开始呢?→ 客户需求的调研: □ 一款软件的价值高低由哪个环节决定呢?→ 软件的分析与设计: □ 软件顺利完成开发靠什么?→ 高效的项目管理: □ 软件开发的主要角色?→ 客户. ...

  5. 软件工程课程第二次任务——需求分析与原型设计

    作业归属课程 软件工程班级社区 王雯 21381101 张睿 21380805 作业要求 软件工程课程第二次任务安排 作业目标 主要完成NABCD模型.需求分析以及主功能原型设计 原型作业 O-xpl ...

  6. 【管理】需求分析与软件设计|需求分析报告和需求规格说明书的区别

    目录 需求分析与软件设计 需求分析和需求规格书 需求分析与软件设计 需求分析    面向客户,主要是为客户服务的 软件设计   面向团队,是自己团队设计软件的思路 需求分析  分析需要做什么 软件设计 ...

  7. 基于Django的照相馆预约系统的设计与实现

    源码获取:点击下载 基于Django的照相馆预约系统的设计与实现 基于pycharm 平台,采用django语言,JavaScript语言,HTML语言,css语言,以及mysql数据库设计与实现.类 ...

  8. 测试需求分析与测试用例设计

    一. 界面中的控件知识 1. 文本框和密码框 文本框 长度要求: 输入内容限制. 密码框 长度要求: 不允许明文显示: 禁止复制粘贴: 输入内容限制: 两次密码要一致. 2. 单选按钮.组合列表框.数 ...

  9. 03.福大本科生毕设导师双向选择系统_需求分析和原型设计

    031402508 洪佳铭 031402516 黄瑞钰 需求分析和原型设计pdf 一.需求分析 1.N(Need,需求) 分配过程繁琐:以往都是通过系负责人对各班收集来的信息进行汇总,再通过某种复杂的 ...

最新文章

  1. centos sudo不能运行_如何在 Linux 中配置 sudo 访问权限 | Linux 中国
  2. UBoot讲解和实践-----------讲解(一)
  3. Emacs中的Color Theme以及字体设置
  4. 2022年移动应用趋势洞察白皮书
  5. 实践设计模拟计算机,个体化股骨假体的计算机辅助设计实践及模拟力学实验
  6. 如何做一个国产数据库(六) 网络传输 nodejs做测试客户端
  7. 黎明杀机手游未能连接服务器,黎明杀机无法连接在线服务及EAC绿条读完后无反应解决方法...
  8. 嵌入式linux系统移植的四大步骤_嵌入式 Linux 产品技术评估之系统裁剪与启动速度...
  9. android app 架构设计_这些冷门的App,好用到为你打开新世界大门
  10. Java使用POI导出excel(下)——实例与小技巧
  11. 如何把Excel两列内容合并成一列内容
  12. svn项目管理服务器,Apache 下SVN项目管理使用说明
  13. 计算机无法查看隐藏文件夹,电脑里的隐藏文件夹怎么显示不出来啊?
  14. 编写一个程序,模拟默认密码的自动生成策略,手动输入用户名,根据用户名自动生成默认密码。在生成密码时,将用户名反转即为默认的密码。
  15. 微星主板前置音频接口的连接说明
  16. 年度光电领域盛会——CIOE中国光博会开幕在即!小枣君将全程在线直播!
  17. 各种水龙头拆卸图解_水龙头拆除和安装步骤图解
  18. 什么样的程序员适合去创业公司
  19. ubuntu 16.04下载网易云音乐 在处理时有错误发生:netease-cloud-music解决
  20. 在用argparse的add_argument添加运行参数时,(bool类型)参数不生效

热门文章

  1. MySQL学习之二进制日志
  2. ejs模板引擎的使用
  3. 《Excel 职场手册:260招菜鸟变达人》一第 14 招 利用数据验证记录数据录入时间...
  4. 软件工程个人最终总结
  5. 零距离感受2015年安全***大赛:静动之美 ***兼备
  6. HttpClient basic authentication
  7. javaFX中解决填充(拉伸)问题
  8. C# 按钮控制windows音量
  9. jquery如何对多个对象绑定同一事件
  10. 需求旺盛:市场提供大量机器学习与物联网相关岗位