多人博客系统(BBS)-1
BBS:多人博客系统
两类行业区别
传统软件行业:给第三方做解决方案
互联网行业:饿了么、叮咚买菜等...
软件开发流程
- 项目立项:公司高层、市场人员、市场调研、跟客户对接事项
- 项目设计:产品经理(设计软件功能、设计原型图)
- 项目的具体设计:UI(切图)
- 分任务开发:
前端:pc、小程序、移动端 分任务开发
后端:架构、数据库设计(设计表、表关联) 多人系统开发
- 联调
- 测试:功能测试、自动化测试、接口测试等...
- 上线运行:运维
后续出现bug 进行维护 版本迭代
BBS项目表设计及关联
开发的功能
- 注册功能
- 登录功能
- 首页:文章展示、导航栏、用户中心、广告位
- 个人主页:文章展示、侧边栏过滤(分类、标签、时间)
- 文章详情:点赞点踩、评论(父评论、子评论)
- 后台管理:这个人的文章展示(增加、删除、修改文章)
- 发布文章:富文本编辑器、xxs攻击处理
设计数据库(bbs)
- 用户表(基于auth的user表扩写,扩写字段)
- 博客表
- 标签表
- 分类表
- 文章表
- 点赞点踩表
- 评论表
表的关联关系
- 用户表(基于auth的user表扩写,扩写字段)
- 博客表:跟用户表是一对一
- 标签表:跟博客表是一对多 跟文章表是多对多
- 分类表:跟博客表是一对多 跟文章表是一对多
- 文章表:跟博客表是一对多
- 评论表:跟用户表是一对多 跟文章表是一对多
- 点赞点踩表:跟用户表是一对多 跟文章表是一对多
表的关系图
项目表字段编写和表迁移
创建项目
第一步:安装djagno 2.2.2
pip3 install django==2.2.2
第二步:使用pycharm创建项目
第三步:配置文件
使用MySQL 创建BBS数据库(终端命令创建 create database BBS;或者Navicat创建)
在models中,写表模型
# Create your models here.
from django.db import models
from django.contrib.auth.models import AbstractUser
# 一共创建8张表 其中一张为标签表与文章表多对多 自动创建
class UserInfo(AbstractUser):
# 表里面有username。password。email....
phone = models.CharField(max_length=32, null=True)
# 存文件的字段本质还是varchar 可以把文件自动保存(avatar文件夹) 存的文件地址
avatar = models.FileField(upload_to='avatar', default='avatar/default.png') # 头像 存在avatar文件夹
blog = models.OneToOneField(to='Blog', on_delete=models.CASCADE, null=True)
class Blog(models.Model):
title = models.CharField(max_length=32, null=True, verbose_name='主标题')
site_name = models.CharField(max_length=32, null=True, verbose_name='副标题')
site_style = models.CharField(max_length=32, null=True, verbose_name='个人站点样式')
class Tag(models.Model):
name = models.CharField(max_length=32, verbose_name='标签名称')
# on_delete可以有很多选项 目前先用级联删除(灰长危险)
blog = models.ForeignKey(to='Blog', on_delete=models.CASCADE)
class Category(models.Model):
name = models.CharField(max_length=32, verbose_name='分类名字')
blog = models.ForeignKey(to='Blog', on_delete=models.CASCADE)
class Article(models.Model):
title = models.CharField(max_length=32, verbose_name='文章名字')
desc = models.CharField(max_length=255, verbose_name='文章摘要')
content = models.TextField(verbose_name='文章内容') # 大文本
create_name = models.DateTimeField(auto_now_add=True, verbose_name='文章创建时间')
blog = models.ForeignKey(to='Blog', on_delete=models.CASCADE)
category = models.ForeignKey(to='category', on_delete=models.CASCADE)
# 多对多关系,需要创建第三张表,
# -django的orm的ManyToManyField字段可以自动创建第三张表(ArticleToTag)
# -手动创建第三张表:ManyToManyField一定要加两个参数,through=中间表,through_fields通过哪两个字段关联
tag = models.ManyToManyField(to='Tag')
class UpAndDown(models.Model):
user = models.ForeignKey(to='UserInfo', on_delete=models.CASCADE)
article = models.ForeignKey(to='Article', on_delete=models.CASCADE)
is_up = models.BooleanField(verbose_name="点赞或点踩")
create_time = models.DateTimeField(auto_now_add=True)
class Comment(models.Model):
user = models.ForeignKey(to='UserInfo', on_delete=models.CASCADE)
article = models.ForeignKey(to='Article', on_delete=models.CASCADE)
content = models.CharField(max_length=64, verbose_name="评论的内容")
create_time = models.DateTimeField(auto_now_add=True)
# parent=models.ForeignKey(to='Comment', on_delete=models.CASCADE)
# parent=models.IntegerField(null=True)
parent = models.ForeignKey(to='self', on_delete=models.CASCADE, null=True)
安装pymysql
pip3 install pymysql
在__ini__.py中加入:djagno默认操作mysql数据库使用的是 mysqlDB模块,在python2中没问题,但是在python3中已经不维护了,不支持,python3中操作mysql咱么用pymysql比较多,但是需要加下面两句话才能正常使用-----》猴子补丁(动态替换--把源码使用mysqlDB替换成pymysql的东西)
但是在django2.0.7及以后版本,需要改源码才能使用:operations.py---》146行,改成query = query.encode(errors='replace')
import pymysql
pymysql.install_as_MySQLdb()
以后直接使用 mysqlclient:有可能装不上 铁铁 拼一波人品
pip3 install mysqlclient