【BBS项目】第01回 项目开发流程,表关联与表创建

1. 项目开发流程

1.1 BBS了解

BBS: 多人博客系统

技术:django、mysql

行业了解:
    传统软件行业:给第三方做解决方案
    互联网行业:  饿了么,美团....

1.2 软件开发流程

1. 项目立项(高层,市场人员:市场调研,跟客户对接)
2. 项目设计(产品经理:设计软件功能,设计原型图)
3. 项目的具体设计(UI:切图)
4. 分任务开发
       前端:pc,小程序,移动端  分任务开发
       后端:架构,数据库设计---(设计表,表关联)多人系统开发
5. 测试联调:功能测试,自动化测试,接口测试,验证各了系统之间接口及系统整体功能的正确性。、、、
6. 上线运行:运维
7. 出现bug,项目维护阶段
8. 版本迭代

2. BBS项目表设计及关联

2.1 开发的功能

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

2.2 技术选型

python3.8  django2.2.2  mysql:5.7  jquery2.x   bootstrap@3

2.3 设计数据库

1. 库名:bbs
2. 用户表:UserInfo,基于auth的user表扩写,扩写字段
3. 博客表:Blog,跟用户表一对一
4. 标签表:Tag,跟博客表一对多,跟文章是多对多
5. 分类表:Category,跟博客表一对多,跟文章是一对多
6. 文章表:Article,跟博客表是一对多
7. 点赞点踩表:UpAndDown,跟用户一对多,跟文章表一对多
8. 评论表:Comment,跟用户一对多,跟文章表一对多

3. 项目表字段编写和表迁移

3.1 创建项目

第一步:安装djagno 2.2.2
pip3 install django==2.2.2
第二步:使用pycharm创建项目
第三步:配置文件
settings,py 58行:'DIRS': [os.path.join(BASE_DIR , 'templates')]
第四步:国际化
原本
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
改为
LANGUAGE_CODE = 'zh-hans'   # 语言中文
TIME_ZONE = 'Asia/Shanghai' # 时区使用上海时区
USE_I18N = True
USE_L10N = True
USE_TZ = False
第五步:使用mysql,创建bbs数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'bbs',
        'HOST': '127.0.0.1',
        'POST': 3306,
        'USER': 'root',
        'PASSWORD': '123',
    }
}

4. 在models中,写表模型

from django.db import models

# Create your models here.

from django.contrib.auth.models import AbstractUser


# 7张表
# 继承AbstractUser,扩写字段:头像字段,手机号字段,一对一的博客字段

class UserInfo(AbstractUser):
    # username,password,email..已有
    phone = models.CharField(max_length=32, null=True)
    # 头像,如果没有上传头像用 default='avatar/default.png'
    avatar = models.FileField(upload_to='avatar',default='avatar/default.png')
    # 一对一关联了blog表
    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='标签名字')
    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_time = models.DateTimeField(auto_now_add=True,verbose_name='文展创建时间')
    # 配置auto_now_add = True,创建数据记录的时候会把当前时间添加到数据库。
    # 配置上auto_now=True,每次更新数据记录的时候会更新该字段
    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)

4.1 评论表自关联

  # 自关联字段---》父评论--》子评论
    '''
    id  user   article   content          parent
    1    2      1        写的真好           空   
    2    2      2        写的一般           空
    3    3      2        人家明明写的很好    2

5. 安装pymysql

安装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 21:31  |相得益张|  阅读(70)  评论(0)    收藏  举报