BBS项目
项目开发流程
1.BBS:多人博客系统
2.行业:
传统软件行业
互联网行业
3.软件开发流程
项目立项
项目设计
分任务开发
前端:pc 小程序 移动端
后端:架构设计 数据库设计
前后端分离:联调
测试
上线
维护
bbs项目表设计及关联关系
1.涉及技术选型:django mysql 2.2.2 jquery bootstrap
2.项目涉及功能
注册
登录
首页:导航栏 文章展示 用户中心 广告位(轮播图)
个人主页:文章展示 侧边栏(分类 标签 时间)
文章详情:点赞点踩 评论(涉及子评论)
后台管理:个人文章展示(新增 删除 修改)
文章发布:富文本编辑器 xss攻击处理
3.项目涉及数据库
用户表:基于auth_user表扩写(新增字段)
博客表
文章表
标签表
点赞点踩表
评论表
4.表关联关系
用户表:与博客表一对一关系
博客表:与文章表 标签表 分类表一对多关系
文章表:与标签表是多对多的关系 # 涉及第三张表
标签表:
分类表:与文章表是一对多关系
点赞点踩表:与用户表 文章表一对多关系
评论表:与用户表 文章表是一对多关系
项目表字段编写及表迁移
1.创建项目
1.1 django 2.2.2版本安装
pip3 install django==2.2.2
1.2 项目创建
1.3 配置文件修改
templates文件夹
国际化
数据库
静态文件static
auth_user表扩展配置:AUTH_USER_MODEL = 'blog.UserInfo'
2.表创建
注:django项目创建注意事项:
2.1 执行数据库迁移命令时:涉及django默认操作数据库使用的是mysqlDB模块
python2可以正常使用
不再维护:
没有该模块 python3操作mysql使用的是pymysql
需要使用猴子补丁(动态替换:mysqlDB换为pymysql)
import pymysql
pymysql.install_as_MYSQLdb()
但在django2.0.7及以上版本还需要修改源码:
operations.py 146行 query=query.encode(errors='replace')
也可以直接下载 mysqlclient:有时候安装可能报错
pip3 install mysqlclient
2.2 表创建代码操作:
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
# 用户表
class UserInfo(AbstractUser):
phone = models.CharField(max_length=32, null=True)
avatar = models.FileField(upload_to='avatar', default='avatar/default.png', verbose_name='头像')
blog = models.OneToOneField(to='Blog', null=True, on_delete=models.CASCADE) # 用户表与博客表一对一关系
# 博客表
class Blog(models.Model):
title = models.CharField(max_length=32, verbose_name='标题')
subtitle = models.CharField(max_length=32, verbose_name='副标题')
user_style = models.CharField(max_length=32, verbose_name='个人站点样式')
# 文章表
class Article(models.Model):
title = models.CharField(max_length=32, verbose_name='文章标题')
article_abstract = models.CharField(max_length=255, verbose_name='文章副标题')
content = models.TextField(verbose_name='文章内容')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
blog = models.ForeignKey(to=Blog, null=True, on_delete=models.CASCADE) # 文章表与博客表是一对多的关系
category = models.ForeignKey(to='Category', null=True, on_delete=models.CASCADE) # 文章表与分类表是一对多
tag = models.ManyToManyField(to='Tag')
# 标签表
class Tag(models.Model):
name = models.CharField(max_length=32, verbose_name='标签名')
blog = models.ForeignKey(to=Blog, null=True, on_delete=models.CASCADE) # 标签表与文章表是一对多的关系
# 分类表
class Category(models.Model):
name = models.CharField(max_length=32, verbose_name='分类名')
blog = models.ForeignKey(to=Blog, null=True, on_delete=models.CASCADE) # 分类表与博客表是一对多
# 点赞点踩表
class UpAndDown(models.Model):
is_up = models.BooleanField(verbose_name='点赞或点踩')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='点赞点踩时间')
user = models.ForeignKey(to=UserInfo, null=True, on_delete=models.CASCADE) # 点赞点踩表与用户表是一对多
article = models.ForeignKey(to=Article, null=True, on_delete=models.CASCADE) # 点赞点踩表与文章表是一对多
# 评论表
class Comment(models.Model):
content = models.CharField(max_length=255, verbose_name='评论内容')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='评论时间')
user = models.ForeignKey(to=UserInfo, null=True, on_delete=models.CASCADE) # 评论表与用户表是一对多
article = models.ForeignKey(to=Article, null=True, on_delete=models.CASCADE) # 评论表与文章表是一对多
parent = models.ForeignKey(to='self', null=True, on_delete=models.CASCADE) # 父评论与子评论是一对多
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)