Merge pull request 'Ck' (#2) from ck into main

Reviewed-on: wolin_ck666_999/StuManagerSys#2
This commit is contained in:
2026-09-22 13:14:23 +08:00
4 changed files with 174 additions and 0 deletions
+67
View File
@@ -0,0 +1,67 @@
from fastapi import APIRouter,Depends,UploadFile,File,Query
from model.teaModel import Session
from dao.teaDao import insert_teachers_dao,update_teachers_dao,delete_teachers_dao,get_teachers_limit_dao,get_teachers_name_dao
from schema.teaSchema import RequestModel, ResponseModel
t_router = APIRouter()
def get_db():
db = Session()
try:
yield db
finally:
db.close()
@t_router.get("/teachers",tags=['教师接口信息'],summary='分页查询教师接口')
def get_teachers(p:int=Query(default=0,ge=0,description='页码,0表示查询全部'),
n:int=Query(default=0,ge=0,description='每页条数,0表示查询全部'),
db=Depends(get_db)):
db_teachers = get_teachers_limit_dao(p,n,db)
return ResponseModel(data=db_teachers,total=len(db_teachers))
@t_router.get("/teachers/{name}",tags=['教师接口信息'],summary='分页查询教师接口')
def get_name_teachers(name:str,db=Depends(get_db)):
db_teachers = get_teachers_name_dao(name,db)
return ResponseModel(data=db_teachers,total=len(db_teachers))
@t_router.post("/teachers",tags=['教师接口信息'],summary='新增教师接口')
def insert_teachers(req:RequestModel,db=Depends(get_db)):
rq= req.model_dump()
n,m = insert_teachers_dao(rq,db)
# print('打印获取的值:',n,m)
return ResponseModel(total=n,msg=m)
@t_router.put("/teachers/{t_id}",tags=['教师接口信息'],summary='更新教师接口')
def update_teachers(req:RequestModel,t_id:int,db=Depends(get_db),):
rq= req.model_dump()
n,m = update_teachers_dao(rq,db,t_id)
return ResponseModel(total=n,msg=m)
@t_router.delete("/teachers/{t_id}",tags=['教师接口信息'],summary='删除教师接口')
def delete_teachers(t_id:int,db=Depends(get_db)):
n,m =delete_teachers_dao(t_id,db)
return ResponseModel(msg=m,total=n)
@t_router.post('/files',tags=['文件接口信息'],summary='上传文件接口')
async def upload_files(f:UploadFile=File(),db=Depends(get_db)):
# print('UploadFile上传文件,读取该对象:',f)
text =await f.read()
l =text.decode('utf-8').split('\n')
lg = 0
dt = []
print('长度为',lg,l)
for i in l:
if '名字' in i:
continue
p = i.split()
if not p: # 判断如果p为[],跳过
continue
l2 = ['t_name','t_age','t_phone','t_sex','class_id']
d =dict()
for j in range(len(p)):
d[l2[j]]=p[j]
insert_teachers_dao(d,db)
lg = lg + 1
dt.append(d)
return ResponseModel(msg='上传成功',total=lg,data=dt)
+63
View File
@@ -0,0 +1,63 @@
from sqlalchemy.exc import SQLAlchemyError
from fastapi import HTTPException
from model.teaModel import Teacher
def get_teachers_limit_dao(p,n,db):
if p == 0 and n == 0:
r = db.query(Teacher).all()
else:
if p < 1:
p = 1
r = db.query(Teacher).offset((p-1)*n).limit(n).all()
return [ {'id':i.id,'t_name':i.t_name,'t_sex':i.t_sex,'t_age':i.t_age} for i in r]
def get_teachers_name_dao(name,db):
try:
r = db.query(Teacher).filter(Teacher.t_name==name).all()
except SQLAlchemyError as e:
db.rollback()
raise HTTPException(status_code=500, detail=f'查询失败:{str(e)}')
else:
return [ {'id':i.id,'t_name':i.t_name,'t_sex':i.t_sex,'t_age':i.t_age} for i in r]
def insert_teachers_dao(req,db):
try:
exist = db.query(Teacher).filter(Teacher.t_phone==req['t_phone']).first()
if exist:
raise HTTPException(status_code=400,detail='该手机号码已存在,不可重复使用')
t = Teacher(**req)
db.add(t)
except SQLAlchemyError as e:
db.rollback()
raise HTTPException(status_code=500,detail=f'添加失败:{str(e)}')
else:
db.commit()
return True,'添加成功'
def update_teachers_dao(req,db,t_id):
try:
db.query(Teacher).filter(Teacher.id == t_id).update(req)
except SQLAlchemyError as e:
db.rollback()
raise HTTPException(status_code=500,detail=f'更新失败:{str(e)}')
else:
db.commit()
return True,'更新成功'
def delete_teachers_dao(t_id,db):
try:
r = db.query(Teacher).filter(Teacher.id == t_id).all()
if not r:
raise HTTPException(status_code=404,detail='记录不存在')
for i in r:
if i.is_delete == 0:
db.query(Teacher).filter(Teacher.id == i.id).update({'is_delete':True})
else:
raise HTTPException(status_code=400,detail='该记录已删除,不可重复删除')
except SQLAlchemyError as e:
db.rollback()
raise HTTPException(status_code=500,detail=f'删除失败:{str(e)}')
else:
db.commit()
return True,'删除成功'
+28
View File
@@ -0,0 +1,28 @@
from sqlalchemy import Integer, String, Column, DateTime, Enum as SQLEnum,Boolean,create_engine
from sqlalchemy.orm import declarative_base,sessionmaker
from enum import Enum
from datetime import datetime
tea_url ='mysql+pymysql://root:123456@127.0.0.1:3306/ai0824_stu?charset=utf8'
engine = create_engine(tea_url,pool_size=100, echo=False)
Base = declarative_base()
class Sex(Enum):
w = '女'
m = '男'
class Teacher(Base):
__tablename__ = 's_teacher'
id =Column(Integer, primary_key=True,autoincrement=True)
t_name = Column(String(100),comment='教师名称')
t_age = Column(Integer,comment='年龄')
t_phone = Column(String(20),unique=True,comment='电话')
t_sex = Column(SQLEnum(Sex,values_callable=lambda x: [e.value for e in x]),comment='性别')
class_id = Column(String(100),comment='带班编号')
create_time = Column(DateTime,default=datetime.now,comment='创建时间')
update_time = Column(DateTime,default=datetime.now,onupdate=datetime.now,comment='更新时间')
is_delete = Column(Boolean,default=False,comment='判断是否删除')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine,autoflush=False,autocommit=False)
+16
View File
@@ -0,0 +1,16 @@
from pydantic import BaseModel,Field
from model.teaModel import Sex
class RequestModel(BaseModel):
t_name: str=Field(min_length=2,max_length=20)
t_sex:Sex
t_age: int=Field(gt=0)
t_phone: str=Field(min_length=11)
class_id: str
class ResponseModel(BaseModel):
code: int = 200
msg: str = '操作成功'
total: int = 0
data: list=Field(default=[])