随笔- 72  文章- 0  评论- 0  阅读- 6709 

BBS项目

项目开发流程

 1.BBS:多人博客系统
 2.行业:
  传统软件行业
  互联网行业
 3.软件开发流程
  项目立项
  项目设计
  分任务开发
   前端:pc 小程序 移动端
   后端:架构设计 数据库设计
  前后端分离:联调
  测试
  上线
  维护

bbs项目表设计及关联关系

 1.涉及技术选型:django mysql 2.2.2 jquery bootstrap
 2.项目涉及功能
  注册
  登录
  首页:导航栏 文章展示 用户中心 广告位(轮播图)
  个人主页:文章展示 侧边栏(分类 标签 时间)
  文章详情:点赞点踩 评论(涉及子评论)
  后台管理:个人文章展示(新增 删除 修改)
  文章发布:富文本编辑器 xss攻击处理
 3.项目涉及数据库
  用户表:基于auth_user表扩写(新增字段)
  博客表
  文章表
  标签表
  点赞点踩表
  评论表
 4.表关联关系
  用户表:与博客表一对一关系
  博客表:与文章表 标签表 分类表一对多关系
  文章表:与标签表是多对多的关系 # 涉及第三张表
  标签表:
  分类表:与文章表是一对多关系
  点赞点踩表:与用户表 文章表一对多关系
  评论表:与用户表 文章表是一对多关系

image

项目表字段编写及表迁移

 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)   # 父评论与子评论是一对多
 posted on   拾荒菇凉  阅读(85)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示