• Day8 ---- 云资讯项目介绍与创建


    昨日回顾

    1.Flask框架跨域如何配置?
    2.模型创建的语法是什么?
    3.迁移脚本如何编写?
    4.迁移的命令有哪些?
    5.Flask中如何创建API,如何编写restful风格的API?
    
    • 1
    • 2
    • 3
    • 4
    • 5

    今日内容

    1.云资讯项目产品介绍 ***
    2.MVC模式与大型项目结构创建 *****
    3.项目初始化 *****
    4.数据库设计 *****
    
    • 1
    • 2
    • 3
    • 4

    1.云资讯产品介绍

    1.1 产品介绍
    # 产品介绍
    云资讯是一款集成多端的科技资讯类阅读产品, 类似于今日头条, 为用户提供科技类新闻资讯.产品共分为以下几个终端:
        1.用户端
        用户可以从用户端获取新闻资讯, 有阅读, 关注, 评论, 收藏, 选择指定类别频道等功能, 分移动web页面, APP端等.
        2.自媒体端
        自媒体端是供自媒体工作者使用的, 提供自媒体作者发布资讯, 编辑资讯, 查看自媒体号运营数据的平台
        3.MIS管理后台
        MIS管理后台是云资讯产品公司运营管理的后台, 可进行用户管理, 文章审核及管理, 评论管理等
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1.2产品技术架构设计
    # 技术架构设计
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9M25DoGG-1656156686772)(images/8-1.png)]

    1.3 人员组织与开发周期说明
    # 开人员组织架构与开发周期说明
    - 产品经理: 1- UI设计: 1- 前端: 2- APP开发: 1- Vue开发: 1- Web后端: 2- 测试: 1# 开发周期: 24天
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.MVC设计模式与大型项目结构

    2.1MVC设计模式
    # 设计模式
    什么是设计模式呢? 你都学过哪些设计模式?
    1.什么是设计模式:
    设计模式是由GoF首先提出的, 设计模式就是解决特定问题的解决方案.
    2.常见设计模式:
    单例模式, 门面模式, MVC模式, 工厂模式
    
    # MVC模式
    	MVC模式即模型-视图-控制器设计模式.
    	MVC不仅是一种实现用户界面的软件模式, 同时也是一种易于修改和维护的架构. MVC模式的国祚原理如下:
        模型提供数据和业务逻辑(如何存储和查询信息), 视图负责数据的展示(如何呈现), 而控制器是两者之间的粘合剂, 根据用户要求的呈现方式来协调模型和视图.
        MVC模式的流程如下图所示:8-2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DsXrPJvH-1656156686773)(images/8-2.png)]

    2.2大型项目结构
    project  # 项目总目录
    		common  # 通用目录
        	cache  # 缓存目录
            models  # 模型目录
            settings  # 配置文件目录
            utils  # 工具类脚本目录
        project  # 项目内层目录
        	resources  # 蓝图源码目录
            schedule  # 定时任务目录
            tests  # 测试文件目录
            main.py  # 主文件
        mis  # mis服务目录
        im  # im服务目录
        README.md  # 说明文件
        requirments.txt  # 依赖清单
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3.项目初始化操作

    # 项目初始化:
        1.创建配置
        2.创建数据库连接对象
        3.创建测试蓝图
        4.封装APP: 加载配置, 注册蓝图, db绑定, 跨域配置, 创建api对象
        5.主文件main.py编写, 并运行项目
        6.测试蓝图路由的访问
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    3.1配置类构建
    # 1.项目配置类构建: 在settings下创建default.py
    class DefaultConfig(object):
        """
        Flask默认配置
        """
        # flask-sqlalchemy使用的参数
        SQLALCHEMY_DATABASE_URI = 'mysql://root:admin123@127.0.0.1:3306/cloudnews'
        SQLALCHEMY_TRACK_MODIFICATIONS = False  # 追踪数据的修改信号
        SQLALCHEMY_ECHO = True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    3.2数据库db对象创建
    # 2.数据库db对象创建: models下的__init__.py文件
    from flask_sqlalchemy import SQLAlchemy
    
    db = SQLAlchemy()
    
    • 1
    • 2
    • 3
    • 4
    3.3蓝图的创建
    # 3.蓝图的创建: resources下创建bptest蓝图文件夹, 并创建bpt蓝图文件进行测试
    from flask import Blueprint
    from flask_restful import Api, Resource
    
    
    tbp = Blueprint('tbp', __name__)
    
    api = Api(tbp)
    
    
    class TestResource(Resource):
        def get(self):
            return 'bp_test'
    
    
    api.add_resource(TestResource, '/test')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    3.4APP封装
    # 4.封装APP: 在cloudnews文件夹下的__init__.py中创建工厂函数封装APP
    from flask import Flask
    from cloudnews.resources.bptest.bpt import tbp
    from common.models import db
    from flask_restful import Api
    from flask_cors import CORS
    
    
    def create_flask_app(config):
        app = Flask(__name__)
        # 加载配置
        app.config.from_object(config)
        # 注册蓝图
        app.register_blueprint(tbp)
        # db对象绑定app
        db.init_app(app)
    
        # 跨域配置
        cors = CORS(app, resources={r"/api/*": {"origins": "*"}})
        # 创建api对象
        api = Api(app)
    
        return app
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    3.5db绑定APP与蓝图注册
    # 5.db绑定APP与蓝图注册
    	# 注册蓝图
        app.register_blueprint(tbp)
        # db对象绑定app
        db.init_app(app)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    3.6跨域配置与API引入
    # 6.跨域配置与API引入
    	# 跨域配置
        cors = CORS(app, resources={r"/api/*": {"origins": "*"}})
        # 创建api对象
        api = Api(app)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 7.主文件编写
    import os
    import sys
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    print(BASE_DIR)
    sys.path.insert(0, BASE_DIR)
    #
    from cloudnews import create_flask_app
    from common.settings.default import DefaultConfig
    
    app = create_flask_app(DefaultConfig)
    
    if __name__ == '__main__':
        print(app.url_map)
        app.run()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    # 8.测试运行: 运行main.py
    使用postman访问: http://127.0.0.1:5000/test
    响应: bp_test表示项目正常运行
    
    • 1
    • 2
    • 3

    4.数据库设计

    4.1数据库设计方法
    # 数据库设计问题
    项目开始的第一件事就是数据的设计, 数据库的设计好坏直接影响项目的进行.数据库的设计主要从以下几个方面进行
    	- 表结构设计
    	- 字段类型选择, 是否允许为空, 是否有默认值等约束
    	- 索引设计
    	- 数据库引擎的选择
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # 数据库设计依据
    	数据库设计前不是凭空想象的, 而是依据产品原型进行分析设计. 所以在数据库设计之前应有产品提供产品原型, 成员根据产品原型设计数据库, UI根据产品原型设计UI界面.
    	前端和后端拿到产品原型, 便可以同时进行开发了. 前端与后端之间同时开发的约束为借口文档. 两方分头进行, 统一于接口, 最后进行前后端联调与测试, 最终上线, 不断进行迭代.
    
    • 1
    • 2
    • 3
    4.2表结构分析

    云资讯包含三个端, 我们以用户pc端为例进行数据库设计.

    (1).表分析

    # 1.登录页: 用户登录
    用户表
    
    • 1
    • 2
    image-20210208184733644
    # 2.首页:所有频道, 用户频道, 资讯列表
    频道表
    用户频道表(一个用户可以关注多个频道, 一个频道可以被多个用户关注 --> 多对多)
    资讯表
    
    • 1
    • 2
    • 3
    • 4
    image-20210208192602610 image-20210208192741792
    # 3.资讯详情页:关注, 评论, 收藏, 点赞(属于资讯)
    关注(关注与被关注, 多对多-->第三张表)
    评论表
    收藏表(一个人可以收藏很多, 一篇资讯可以被很多人收藏-->第三张表)
    点赞表
    
    • 1
    • 2
    • 3
    • 4
    • 5
    image-20210208193422441
    # 4.搜索页:
    搜索历史表
    
    • 1
    • 2
    # 总结:
    1.用户表
    2.频道表
    3.用户频道表(第三张表)
    4.资讯表
    5.关注表(用户与用户之间的第三张表)
    6.评论内容表(设置外键关联用户)
    7.收藏表(用户与资讯之间的第三张表)
    8.评论点赞表
    9.搜索历史表(设置外键关联用户)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4.2表字段分析

    # 1.用户表
    字段名             字段类型           约束              描述
    uid                Integer          primary_key     用户ID
    mobile             String                           手机号
    password           String                           密码
    user_name          String                           昵称
    profile_photo      String                           头像
    last_login         DateTime                         最后登录时间
    is_media           Boolean          default         是否是自媒体
    is_verified        Boolean          default         是否实名认证
    introduction       String                           简介
    certificate        String                           认证
    article_count      nteger           default         发帖数
    following_count    Integer          default         关注的人数
    fans_count         Integer          default         被关注的人数(粉丝数)
    like_count         Integer          default         累计点赞人数
    read_count         Integer          default         累计阅读人数
    
    account            String(32)                       账号
    email              String(64)                       邮箱
    status             db.Integer       default         状态,是否可用
    
    # 2.用户关注表
    字段名               字段类型       约束                          描述
    user_id             Integer       ForeignKey,primary_key      用户ID
    foller_id           Integer       ForeignKey,primary_key      粉丝ID
    relation            Boolean                                   状态(1,关注;0, 取消) 
    create_time         DateTime      default                     创建时间
    update_time         DateTime      default                     更新时间 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    # 3.频道表
    字段名           字段类型       约束                          描述
    cid             Integer       ForeignKey,primary_key      频道ID
    name  					String																		名字
    is_delete       Boolean       default                     状态(1,可用; 0,不可用)
    sequence        Integer       default                     序号
    
    # 4.用户频道表
    字段名           字段类型       约束                        描述
    id							Integer      														 用户频道ID
    uid             Integer      ForeignKey,primary_key      用户ID
    cid             Integer      ForeignKey,primary_key      频道ID
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    # 5.资讯表
    字段名            字段类型        约束               描述
    nid              Integer        primary_key       文章ID  
    user_id          Integer        ForeignKey        用户ID
    channel_id       Integer        ForeignKey        频道ID
    title            String(64)                       标题
    cover            String(32)                       封面
    ctime            DateTime       default           创建时间
    comment_count    Integer        default           评论数
    good_count       Integer        default           点赞数
    read_count			 Integer				default						阅读量
    is_allow_comment    Boolean        default           是否允许评论
    utime            DateTime       default           更新时间
    content          Text                             帖文内容
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    # 6.评论表
    字段名             字段类型        约束            描述
    cmid              Integer       primary_key     评论ID
    user_id           Integer       ForeignKey      用户ID
    article_id        Integer       ForeignKey      文章ID
    parent_id         Integer             					被评论的评论id
    like_count        Integer       default         点赞数
    reply_count       Integer       default         回复数
    content           String(128)                   评论内容
    is_top            Boolean       default         是否置顶
    status            Integer       default         评论状态
    ctime             DateTime      default         创建时间
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    # 7.收藏表
    字段名          字段类型      约束                          描述
    collect_id     Integer			primary_key 								主键
    user_id        Integer      ForeignKey,primary_key       用户ID      
    news_id        Integer      ForeignKey,primary_key       资讯ID
    is_delete      Boolean                                   状态(1,关注;0, 取消)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    【入门Flink】- 02Flink经典案例-WordCount
    传奇开区网站如何添加流量统计代码
    JAVA mybatis操作mysql——批量增加,批量删除,多条件模糊搜索,新增时返回id和常用的增删查改
    ppt文件怎么压缩,ppt压缩的办法步骤
    ISP-Gamma
    6.2-反向传播
    论文阅读 MAML (Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks)
    学习:Spring事务扫盲
    C++ 如何把string转为int,如何把int转为string(字符串转为数字,数字转为字符串)
    老项目的倔强——性能优化篇
  • 原文地址:https://blog.csdn.net/weixin_45228198/article/details/125463260