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

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(六十五)实战开发《在线课程学习系统》基础架构的搭建的更多相关文章

  1. FastAPI(六十二)实战开发《在线课程学习系统》需求分析

    前言 基础的分享我们已经分享了六十篇,那么我们这次分享开始将用一系列的文章分享实战课程.我们分享的系统是在线学习系统.我们会分成不同的模块进行分享.我们的目的是带着大家去用fastapi去实战一次,开 ...

  2. FastAPI(六十九)实战开发《在线课程学习系统》接口开发--修改密码

    之前我们分享了FastAPI(六十八)实战开发<在线课程学习系统>接口开发--用户 个人信息接口开发.这次我们去分享实战开发<在线课程学习系统>接口开发--修改密码 我们梳理一 ...

  3. FastAPI(六十八)实战开发《在线课程学习系统》接口开发--用户 个人信息接口开发

    在之前的文章:FastAPI(六十七)实战开发<在线课程学习系统>接口开发--用户登陆接口开发,今天实战:用户 个人信息接口开发. 在开发个人信息接口的时候,我们要注意了,因为我们不一样的 ...

  4. FastAPI(六十三)实战开发《在线课程学习系统》梳理系统需要接口

    针对上一篇FastAPI(六十二)实战开发<在线课程学习系统>需求分析需求的功能,我们对需要的接口进行梳理,大概的规划出来现有的接口,作为我们第一版的接口的设计出版,然后我们根据设计的接口 ...

  5. FastAPI(七十)实战开发《在线课程学习系统》接口开发--留言功能开发

    在之前的文章:FastAPI(六十九)实战开发<在线课程学习系统>接口开发--修改密码,这次分享留言功能开发 我们能梳理下对应的逻辑 1.校验用户是否登录 2.校验留言的用户是否存在 3. ...

  6. FastAPI(六十七)实战开发《在线课程学习系统》接口开发--用户登陆接口开发

    接上一篇文章FastAPI(六十六)实战开发<在线课程学习系统>接口开发--用户注册接口开发.这次我们分享实际开发--用户登陆接口开发. 我们先来梳理下逻辑 1.查询用户是否存在2.校验密 ...

  7. FastAPI(七十四)实战开发《在线课程学习系统》接口开发-- 删除留言

    之前文章FastAPI(七十三)实战开发<在线课程学习系统>接口开发-- 回复留言,那么我们这次分享删除留言接口的开发 可以对留言进行删除,这里的删除,我们使用的是逻辑的删除,不是物理删除 ...

  8. FastAPI(七十二)实战开发《在线课程学习系统》接口开发-- 留言列表开发

    之前我们分享了FastAPI(七十一)实战开发<在线课程学习系统>接口开发-- 查看留言,这次我们分享留言列表开发. 列表获取,也需要登录,根据登录用户来获取对应的留言.逻辑梳理如下. 1 ...

  9. FastAPI(七十三)实战开发《在线课程学习系统》接口开发-- 回复留言

    之前文章分享FastAPI(七十二)实战开发<在线课程学习系统>接口开发-- 留言列表开发,这次我们分享如何回复留言 按照惯例,我们还是去分析这里面的逻辑. 1.判断用户是否登录 2.用户 ...

  10. FastAPI(七十一)实战开发《在线课程学习系统》接口开发-- 查看留言

    之前FastAPI(七十)实战开发<在线课程学习系统>接口开发--留言功能开发分享了留言开发,这次我们分享查看留言 梳理这里的逻辑,这个接口要依赖登录. 1.判断用户是否登录 2.判断对应 ...

随机推荐

  1. Codeforces 1361C - Johnny and Megan's Necklace(欧拉回路)

    Codeforces 题目传送门 & 洛谷题目传送门 u1s1 感觉这个题作为 D1C 还是蛮合适的-- 首先不难发现答案不超过 \(20\),所以可以直接暴力枚举答案并 check 答案是否 ...

  2. 洛谷 P3307 - [SDOI2013]项链(Burnside 引理+数论)

    题面传送门 看到题目我们显然可以将题目拆分成两部分:首先求出有多少个符合要求的珠子 \(c\),这样我们就可以将每种珠子看成一种颜色,题目也就等价于有多少种用 \(c\) 种颜色染长度为 \(n\) ...

  3. doxygen相关命令

    主要配置修改 整个程序配置分几个部分 Project related configuration options 项目相关,包括: 项目名 输出目录 输出语言 是否显示继承属性 是否对C.Java.F ...

  4. zabbix-磁盘状态脚本

    #/bin/sh Device=$1 DISK=$2 case $DISK in tps) iostat -dmt 1 2|grep "\b$Device\b"|tail -1|a ...

  5. EXCEL excel中运用ctrl+D、ctrl+enter、ctrl+E批量填充数据

    在excel中,利用鼠标拖动可以快速向下或者向右填充序列或者复制单元格.但是利用快捷键也可以实现多种填充方式,本文就为大家介绍一些ctrl系列快捷键的填充,一起来看看吧. 封面tu 一,ctrl+D/ ...

  6. PL\SQL和PL/SQL Developer 12安装与配置

    安装: (1)在已有安装包的情况下,直接将安装包解压到文件夹下,注意不要解压缩到c:\programs Files(x86)的文件夹下,不能解压缩到有中文文件夹命名的文件夹下面 (2)没有安装包的情况 ...

  7. mybatis项目中,使用useSSL=true却报错

    今天在玩儿mybatis的时候遇到一个蛮有东西的事情:抛了一个让我折腾几个小时的错误,所以记录一下 这个错误有意思的地方就在于这里: 当使用useSSL安全连接时,抛出了上述的错误把useSSL改为f ...

  8. 【STM8】STM8S介绍(编程环境、烧录、芯片内容)(Vcap需要一个电容接地)

    这篇博客的介绍大纲 [1]我使用的开发板和烧录器 [2]编程环境 [3]烧录软件和界面 [4]芯片内容 [1]我使用的开发板和烧录器 首先,我用的是STM8S003F3P6这款开发板,淘宝上就有了,5 ...

  9. 【分布式】Zookeeper的Leader选举-选举过程介绍(经典的Paxos算法解析)

    一.前言 前面学习了Zookeeper服务端的相关细节,其中对于集群启动而言,很重要的一部分就是Leader选举,接着就开始深入学习Leader选举. 二.Leader选举 2.1 Leader选举概 ...

  10. 【spring AOP】@Pointcut的12种用法

    @Pointcut用来标注在方法上来定义切入点. 使用格式:@ 注解(value="表达标签 (表达式格式)").如:@Pointcut("execution(* com ...