• FastAPI(六十五)实战开发《在线课程学习系统》基础架构的搭建


    在之前三篇,我们分享的就是需求的分析,基本接口的整理,数据库链接的配置。这次我们分享项目的基本框架,目录结构如下:

     

    common目录

    通用的目录,一些通用的处理放在这里

    models目录

    数据库相关的放在这里

    routers目录

    所有的接口存放的地方

    test

    测试用例存放的地方

    config.py 配置文件

    Dockerfile docker打包的,后续部署看到

    main.py 主运行文件

    整体的架构梳理完毕后,我们就可以进行我们相关的开发了,这里我们在之前设计的数据库的相关的,可以放在对应的目录的文件中。

      我们之前的数据库的设计的都可以放到对应的文件中,数据库的表格设计的都放在了models的models.py中

    from sqlalchemy import Column, Integer, String, ForeignKey, Boolean, Text, DateTime
    from datetime import datetime
    from config import EVENT
    
    if EVENT == "test":
        from models.testDatabase import Base, engine
    else:
        from models.database import Base, engine
    
    
    class User(Base):
        '''用户基础表'''
        __tablename__ = "users"
        id = Column(Integer, primary_key=True, index=True)
        username = Column(String(length=32), unique=True, index=True)  # 用户名
        password = Column(String(length=252))  # 密码
        status = Column(Integer, default=0)  # 1.删除,0正常
        jobnum = Column(Integer, nullable=True)  # 工号
        studentnum = Column(Integer, nullable=True)  # 学号
        age = Column(Integer)  # 年龄
        sex = Column(String(length=8), default="男")  # 性别
        role = Column(Integer)  # 角色
        addtime=Column(DateTime,default=datetime.now())
    
    
    class Role(Base):
        '''角色表'''
        __tablename__ = "roles"
        id = Column(Integer, primary_key=True, index=True)
        name = Column(String(length=8), unique=True, index=True)  # 角色名称
    
    
    class Course(Base):
        '''课程表'''
        __tablename__ = "courses"
        id = Column(Integer, primary_key=True, index=True)
        name = Column(String(length=252), unique=True, index=True)  # 课程名称
        icon = Column(String(length=252), nullable=True)  # icon
        desc = Column(String(length=252), nullable=True)  # 描述
        status = Column(Boolean, default=False)  # 状态
        onsale = Column(Boolean, default=False)  # 是否上架
        catalog = Column(Text, nullable=True)  # 目录
        owner = Column(Integer, ForeignKey('users.id'))  # 拥有者
        likenum = Column(Integer, default=0)  # 点赞数
    
    
    class Studentcourse(Base):
        '''学生课程表'''
        __tablename__ = "studentcourses"
        id = Column(Integer, primary_key=True, index=True)
        students = Column(Integer, ForeignKey('users.id'))  # 学生
        course = Column(Integer, ForeignKey('courses.id'))  # 课程
        addtime = Column(DateTime, default=datetime.now())  # 加入时间
        updatetime = Column(DateTime, default=addtime)  # 更新时间
        status = Column(Integer, default=0)  # 1.删除,0正常
    
    class Commentcourse(Base):
        '''课程评论'''
        __tablename__ = "commentcourses"
        id = Column(Integer, primary_key=True, index=True)
        course = Column(Integer, ForeignKey('courses.id'))  # 课程id
        users = Column(Integer, ForeignKey('users.id'))  # 评论人
        pid = Column(Integer)  # 回复。
        addtime = Column(DateTime, default=datetime.now())  # 添加时间
        top = Column(Boolean, default=False)  # 是否置顶
        context = Column(Text)
        status = Column(Integer, default=0)  # 1.删除,0正常
    
    class Message(Base):
        '''消息表'''
        __tablename__ = "messages"
        id = Column(Integer, primary_key=True, index=True)
        senduser = Column(Integer, ForeignKey('users.id'))  # 发送者
        acceptusers = Column(Integer, ForeignKey('users.id'))  # 接受者
        read = Column(Boolean, default=False)  # 是否已读,接受者是否已读
        sendtime = Column(String(length=252))  # 发送时间
        pid = Column(Integer)
        addtime = Column(DateTime, default=datetime.now())  # 添加时间
        context=Column(Text)
        status = Column(Integer, default=0)  # 1.删除,0正常
    
    Base.metadata.create_all(bind=engine)
    

      

    那么之前的数据库配置的就可以放在对应的database中。

            对应的链接的链接数据库的,存放在get_db.py中

    from models.database import *
    from models.testDatabase import TestingSessionLocal
    from config import EVENT
    
    
    def get_test_db():
        db = TestingSessionLocal()
        try:
            yield db
        finally:
            db.close()
    
    
    def get_db_pro():
        """
        每一个请求处理完毕后会关闭当前连接,不同的请求使用不同的连接
        :return:
        """
        db = TestingSessionLocal()
        try:
            yield db
        finally:
            db.close()
    
    
    if EVENT == "test":
        get_db = get_test_db
    else:
        get_db = get_db_pro

       那么我们剩下的开发中,只需要关注models的crud.py和对应的schemas.py。在common的是我们json统一处理,和log处理。对应的可以参考

    FastAPI 学习之路(五十九)封装统一的json返回处理工具

    FastAPI 学习之路(六十)打造系统的日志输出
     
  • 相关阅读:
    Java中存取权限和修饰符public、private、protected和default的区别和联系
    java集合之ArrayList,TreeSet和HashMap分析
    ResultSet,RowSet,OracleCachedRowSet和RowSetMetaData区别及联系
    实战篇
    kubernetes系列之 service代理模式ipvs
    Python Jinja2的简单使用
    Helm v3从入门到实战
    迷宫
    python多线程下载文件
    乱码,编码
  • 原文地址:https://www.cnblogs.com/leiziv5/p/15730930.html
Copyright © 2020-2023  润新知