多人博客系统(BBS)-1

BBS:多人博客系统

两类行业区别

传统软件行业:给第三方做解决方案

互联网行业:饿了么、叮咚买菜等...

软件开发流程

  • 项目立项:公司高层、市场人员、市场调研、跟客户对接事项
  • 项目设计:产品经理(设计软件功能、设计原型图)
  • 项目的具体设计:UI(切图)
  • 分任务开发:

   前端:pc、小程序、移动端                             分任务开发

   后端:架构、数据库设计(设计表、表关联)  多人系统开发

  • 联调
  • 测试:功能测试、自动化测试、接口测试等...
  • 上线运行:运维

  后续出现bug 进行维护  版本迭代

BBS项目表设计及关联

开发的功能

  • 注册功能
  • 登录功能
  • 首页:文章展示、导航栏、用户中心、广告位
  • 个人主页:文章展示、侧边栏过滤(分类、标签、时间)
  • 文章详情:点赞点踩、评论(父评论、子评论)
  • 后台管理:这个人的文章展示(增加、删除、修改文章)
  • 发布文章:富文本编辑器、xxs攻击处理

设计数据库(bbs)

  • 用户表(基于auth的user表扩写,扩写字段)
  • 博客表
  • 标签表
  • 分类表
  • 文章表
  • 点赞点踩表
  • 评论表

表的关联关系

  1. 用户表(基于auth的user表扩写,扩写字段)
  2. 博客表:跟用户表是一对一
  3. 标签表:跟博客表是一对多 跟文章表是多对多
  4. 分类表:跟博客表是一对多 跟文章表是一对多
  5. 文章表:跟博客表是一对多
  6. 评论表:跟用户表是一对多 跟文章表是一对多
  7. 点赞点踩表:跟用户表是一对多 跟文章表是一对多

表的关系图

项目表字段编写和表迁移

创建项目

第一步:安装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

 

posted @ 2022-09-14 19:39  初学者-11  阅读(315)  评论(0编辑  收藏  举报