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

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. C++ and OO Num. Comp. Sci. Eng. - Part 5.

    类 class 关键字提供了一种包含机制,将数据和操作数据的方法结合到一起,作为内置类型来使用. 类可以包含私有部分,仅其成员和 friend 类访问,公有部分可以在程序中任意位置处访问. 构造函数与 ...

  2. 为什么Mysql用B+树做索引而不用B-树或红黑树

    B+树做索引而不用B-树 那么Mysql如何衡量查询效率呢?– 磁盘IO次数. 一般来说索引非常大,尤其是关系性数据库这种数据量大的索引能达到亿级别,所以为了减少内存的占用,索引也会被存储在磁盘上. ...

  3. Perl语言入门14-17

    ---------第十四章 字符串与排序------------------- index查找子字符串 my $stuff = "howdy world!"; my $where ...

  4. 【机器学习与R语言】9- 支持向量机

    目录 1.理解支持向量机(SVM) 1)SVM特点 2)用超平面分类 3)对非线性空间使用核函数 2. 支持向量机应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高性能 ...

  5. 短序列组装Sequence Assembly(转载)

    转载:http://blog.sina.com.cn/s/blog_4af3f0d20100fq5i.html 短序列组装(Sequence assembly)几乎是近年来next-generatio ...

  6. urllib的基本使用介绍

    1. urllib中urlopen的基本使用介绍 1 ### urllib中urlopen的基本使用介绍 2 3 ## urlopen的基本用法(GET请求) 4 import urllib.requ ...

  7. SQL-关联表查询(连表查询)

    0.例如:select * from T1,T2     where T1.a=T2.a 1.连表查询 <=> join(inner join)内连接查询 数据源: Persion表:  ...

  8. keepalived+nginx安装

    安装keepalived+nginx做为公司服务器前端高可用反向代理安装nginx 1.yum install -y pcre pcre-devel gcc-c++ zlib zlib-devel o ...

  9. day11 四层负载均衡和http协议

    day11 四层负载均衡和http协议 四层负载均衡和七层负载均衡的区别 四层和七层负载均衡的区别 四层负载均衡数据包在底层就进行了分发,而七层负载均衡数据包则是在最顶层进行分发.由此可以看出,七层负 ...

  10. 23. 关于Ubuntu中Could not get lock /var/lib/dpkg/lock解决方案

    原文:https://blog.csdn.net/u011596455/article/details/60322568 版权声明:本文为博主原创文章,转载请附上博文链接! 在Ubuntu中,有时候运 ...