FastAPI(六十五)實戰開發《線上課程學習系統》基礎架構的搭建

北漂的雷子發表於2021-12-25

在之前三篇,我們分享的就是需求的分析,基本介面的整理,資料庫連結的配置。這次我們分享專案的基本框架,目錄結構如下:

 

 

 

 

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 學習之路(六十)打造系統的日誌輸出
 

 

 

相關文章