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(六十五)实战开发《在线课程学习系统》基础架构的搭建的更多相关文章
- FastAPI(六十二)实战开发《在线课程学习系统》需求分析
前言 基础的分享我们已经分享了六十篇,那么我们这次分享开始将用一系列的文章分享实战课程.我们分享的系统是在线学习系统.我们会分成不同的模块进行分享.我们的目的是带着大家去用fastapi去实战一次,开 ...
- FastAPI(六十九)实战开发《在线课程学习系统》接口开发--修改密码
之前我们分享了FastAPI(六十八)实战开发<在线课程学习系统>接口开发--用户 个人信息接口开发.这次我们去分享实战开发<在线课程学习系统>接口开发--修改密码 我们梳理一 ...
- FastAPI(六十八)实战开发《在线课程学习系统》接口开发--用户 个人信息接口开发
在之前的文章:FastAPI(六十七)实战开发<在线课程学习系统>接口开发--用户登陆接口开发,今天实战:用户 个人信息接口开发. 在开发个人信息接口的时候,我们要注意了,因为我们不一样的 ...
- FastAPI(六十三)实战开发《在线课程学习系统》梳理系统需要接口
针对上一篇FastAPI(六十二)实战开发<在线课程学习系统>需求分析需求的功能,我们对需要的接口进行梳理,大概的规划出来现有的接口,作为我们第一版的接口的设计出版,然后我们根据设计的接口 ...
- FastAPI(七十)实战开发《在线课程学习系统》接口开发--留言功能开发
在之前的文章:FastAPI(六十九)实战开发<在线课程学习系统>接口开发--修改密码,这次分享留言功能开发 我们能梳理下对应的逻辑 1.校验用户是否登录 2.校验留言的用户是否存在 3. ...
- FastAPI(六十七)实战开发《在线课程学习系统》接口开发--用户登陆接口开发
接上一篇文章FastAPI(六十六)实战开发<在线课程学习系统>接口开发--用户注册接口开发.这次我们分享实际开发--用户登陆接口开发. 我们先来梳理下逻辑 1.查询用户是否存在2.校验密 ...
- FastAPI(七十四)实战开发《在线课程学习系统》接口开发-- 删除留言
之前文章FastAPI(七十三)实战开发<在线课程学习系统>接口开发-- 回复留言,那么我们这次分享删除留言接口的开发 可以对留言进行删除,这里的删除,我们使用的是逻辑的删除,不是物理删除 ...
- FastAPI(七十二)实战开发《在线课程学习系统》接口开发-- 留言列表开发
之前我们分享了FastAPI(七十一)实战开发<在线课程学习系统>接口开发-- 查看留言,这次我们分享留言列表开发. 列表获取,也需要登录,根据登录用户来获取对应的留言.逻辑梳理如下. 1 ...
- FastAPI(七十三)实战开发《在线课程学习系统》接口开发-- 回复留言
之前文章分享FastAPI(七十二)实战开发<在线课程学习系统>接口开发-- 留言列表开发,这次我们分享如何回复留言 按照惯例,我们还是去分析这里面的逻辑. 1.判断用户是否登录 2.用户 ...
- FastAPI(七十一)实战开发《在线课程学习系统》接口开发-- 查看留言
之前FastAPI(七十)实战开发<在线课程学习系统>接口开发--留言功能开发分享了留言开发,这次我们分享查看留言 梳理这里的逻辑,这个接口要依赖登录. 1.判断用户是否登录 2.判断对应 ...
随机推荐
- python3 excel读、写、修改操作
python3上Excel文件操作的库比较多,新手一开始不知道如何选择合适的库,故整理如下: xlwt: 只能写不能读,只支持python2.3到python2.7版本,只支持xls文件. xlrd ...
- 【宏蛋白组】iMetaLab平台分析肠道宏蛋白质组数据
目录 一.iMetaLab简介 二.内置工具与模块 1. Data Processing module 2. Functional Analysis 3. R Developing environme ...
- gcc 引用math 库 编译的问题 解决方法
1.gcc app.c -lm 其中lm表示的是连接 m forlibm.so / libm.a表示你想要的库 abc for libabc.so / libabc.a 其中.a表示的是静态链接库 . ...
- GISer如何突破二次开发瓶颈
年初时写的<一个GISer的使命>那篇文章中,提出了GISer的技术提升路径可以分为四个大的阶段: 阶段一,能使用商业GIS软件去解决问题. 阶段二,能使用开源GIS软件去解决问题. 阶段 ...
- 学习java 7.7
学习内容: 多态转型:向上转型 Animal a = new Cat(); a.eat(); 向下转型 Cat c = (Cat)a; c.eat(); 抽象方法没有方法体,抽象类中有抽象方法 抽象类 ...
- 案例分析 CAN OPEN 调试记录 进度
2020.12.29 发现一片博客:https://blog.csdn.net/harrycomeon/article/details/94650103 需要一个硬件:CAN分析仪,网上200元左右. ...
- db9串口接头的定义
这个接头都是以公头为准,所有接头还是以公头去记. RS-232端(DB9公头/针型)引脚定义 2: RXD 3:TXD 5:GND 1/4/6:内部相链接 7/8 :内部相链接 1.RS-232端 ...
- IOS_UIButton去掉系统的按下高亮置灰效果
setAdjustsImageWhenHighlighted // default is YES. if YES, image is drawn darker when highlighted(p ...
- Can a C++ class have an object of self type?
A class declaration can contain static object of self type,it can also have pointer to self type,but ...
- ACE_Message_Block实现浅析
ACE_Message_Block实现浅析1. 概述ACE_Message_Block是ACE中很重要的一个类,和ACE框架中的重要模式的实现 如ACE_Reactor, ACE_Proactor, ...