80 lines
3.6 KiB
Python
80 lines
3.6 KiB
Python
# 导入FastAPI工具:APIRouter用来创建路由、Depends依赖注入、HTTPException抛出异常
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
# 导入数据库会话Session,用来操作数据库
|
|
from sqlalchemy.orm import Session
|
|
# 导入班级模块DAO层的函数(数据库操作写在dao里面,接口直接调用)
|
|
from dao.class_dao import get_class_by_name, get_class_by_cid, update_class, create_class
|
|
# 导入获取数据库会话的依赖函数
|
|
from database import get_db
|
|
# 导入班级数据库模型Classes(ORM模型)
|
|
from model.class_model import Classes
|
|
# 导入Pydantic模型:请求体ClassAdd、响应体ClassResp
|
|
from schema.class_schema import ClassAdd, ClassResp
|
|
|
|
# 创建路由对象,用来管理班级模块所有接口
|
|
router = APIRouter()
|
|
#路径和方法体之间的联系
|
|
#一个路由
|
|
# 新增班级接口 POST
|
|
#response_model 是Pydantic响应模型 response:后端 → 前端(响应)
|
|
@router.post("/add_class", response_model=ClassResp,description='新增班级')
|
|
def add_class(
|
|
class_data: ClassAdd, # 前端传来的班级数据
|
|
db: Session = Depends(get_db) #依赖注入 就是 FastAPI 自动获取数据库会话 db,传给接口函数
|
|
# 不用手动创建和关闭数据库连接,接口执行完自动释放连接。# 自动获取数据库连接
|
|
):
|
|
# 先查班级名是否存在,防止重复添加
|
|
exist_class = get_class_by_name(db, class_data.class_name)
|
|
if exist_class:
|
|
# 班级重名,抛出错误
|
|
raise HTTPException(status_code=400, detail="班级名称已存在,不能重复添加")
|
|
# 调用dao新增(不再重复写数据库代码)
|
|
new_class = create_class(db, class_data)
|
|
return new_class
|
|
|
|
# 根据id查询单个班级接口 get
|
|
@router.get("/get_one_class/{class_cid}", response_model=ClassResp,description='id查询单个班级')
|
|
def get_one_class(
|
|
class_cid: int, #要查询的班级编号
|
|
db: Session = Depends(get_db) # 获取数据库连接
|
|
):
|
|
# 调用dao查询班级
|
|
class_obj = get_class_by_cid(db, class_cid)
|
|
# 判断有没有查到班级
|
|
if not class_obj:
|
|
#不存在抛出错误
|
|
raise HTTPException(status_code=404, detail="班级不存在")
|
|
# 返回查到的数据
|
|
return class_obj
|
|
|
|
# 修改班级接口
|
|
@router.put("/update_class/{class_cid}", response_model=ClassResp,description='修改班级')
|
|
def update_class_api(
|
|
class_cid: int, # 要修改的班级编号
|
|
new_data: ClassAdd, # 前端传来的新班级信息
|
|
db: Session = Depends(get_db) # 获取数据库连接
|
|
):
|
|
# 调用dao修改班级
|
|
class_obj = update_class(db, class_cid, new_data)
|
|
# 判断班级是否存在
|
|
if not class_obj:
|
|
#不存在抛出错误
|
|
raise HTTPException(status_code=404, detail="班级不存在,修改失败")
|
|
# 返回修改后的班级信息
|
|
return class_obj
|
|
|
|
# 【逻辑删除班级接口】
|
|
@router.delete("/delete_class/{class_cid}",description='逻辑删除班级')
|
|
def delete_class_api(class_cid: int, db: Session = Depends(get_db)): #`class_cid: int`:前端传过来要删除的班级编号
|
|
# 根据班级编号,查询没有被删除的班级(is_del=1代表正常存在)
|
|
class_obj = db.query(Classes).filter(Classes.cid == class_cid, Classes.is_del == 1).first()
|
|
# 如果找不到这个班级
|
|
if not class_obj:
|
|
raise HTTPException(status_code=404, detail="班级不存在,删除失败")
|
|
# 逻辑删除:不改数据库记录,修改标记为0
|
|
class_obj.is_del = 0
|
|
# 保存修改
|
|
db.commit()
|
|
# 返回提示文字
|
|
return {"msg": "逻辑删除成功"}
|