优化了students_dao里add_student_dao的报错逻辑。

This commit is contained in:
Orangeeee
2026-09-22 21:42:44 +08:00
parent ff68a676c4
commit e76cee4bd6
3 changed files with 18 additions and 12 deletions
+6 -6
View File
@@ -9,12 +9,12 @@ from databases import *
app = FastAPI(title="学生管理系统") app = FastAPI(title="学生管理系统")
app.include_router(Classes_API,tags=["classes"]) app.include_router(Classes_API,tags=["班级管理模块"])
app.include_router(Scores_API,tags=["scores"]) app.include_router(Scores_API,tags=["学生考核成绩管理模块"])
app.include_router(Shtudent_Jiuye,tags=["Employments"]) app.include_router(Shtudent_Jiuye,tags=["学生就业管理模块"])
app.include_router(Students_API,tags=["students"]) app.include_router(Students_API,tags=["学生管理模块"])
app.include_router(Teachers_API,tags=["teachers"]) app.include_router(Teachers_API,tags=["老师管理模块"])
app.include_router(StatCalc_API,tags=["StatCalc"]) app.include_router(StatCalc_API,tags=["统计分析模块"])
if __name__ == "__main__": if __name__ == "__main__":
+3 -3
View File
@@ -27,15 +27,15 @@ def get_students( stu:StudentsQuery = Depends()
@s_api.post("/students" @s_api.post("/students"
,summary='新增学生资料' ,summary='新增学生资料'
,description=f'学生ID自动分配,学生姓名、学生手机号和班级是必填项,不能为空。\n ' ,description=f'学生ID自动分配,学生姓名、学生手机号和班级是必填项,不能为空。\n '
f'时间格式:YYYY-MM-DD' f'注意事项:\n'
f'时间格式:YYYY-MM-DD\n'
f'班级ID和顾问ID必须已经存在才可以绑定'
,response_model=StudentsResponse ) ,response_model=StudentsResponse )
def add_student( stu:StudentsResponse = Depends() def add_student( stu:StudentsResponse = Depends()
, db=Depends(get_db) , db=Depends(get_db)
): ):
s_dict = stu.model_dump(exclude_unset=True) s_dict = stu.model_dump(exclude_unset=True)
result = add_student_dao( s=s_dict , db=db ) result = add_student_dao( s=s_dict , db=db )
if not result:
raise HTTPException(status_code=500, detail='手机号已有学生使用或必填项为空。')
return result return result
@s_api.put("/students" @s_api.put("/students"
+9 -3
View File
@@ -62,9 +62,11 @@ def add_student_dao( s , db):
phone = s.get("phone") phone = s.get("phone")
s1_deleted = db.query( Students ).filter( Students.phone == phone ).first() s1_deleted = db.query( Students ).filter( Students.phone == phone ).first()
if s1_deleted and s1_deleted.is_deleted == False: if s1_deleted and s1_deleted.is_deleted == False:
return False raise ValueError("该手机号已存在有效学生记录,请勿重复添加")
if not phone: if not phone:
return False raise ValueError("手机号不能为空")
if not s.get("class_id") or not s.get("advisor_id"):
raise ValueError("班级ID和顾问ID必须已经存在才可以绑定")
if s1_deleted and s1_deleted.is_deleted == True: if s1_deleted and s1_deleted.is_deleted == True:
s1_deleted.name = s.get("name") s1_deleted.name = s.get("name")
s1_deleted.age = s.get("age") s1_deleted.age = s.get("age")
@@ -90,10 +92,14 @@ def add_student_dao( s , db):
return s1_deleted return s1_deleted
s1 = Students( **s ) s1 = Students( **s )
db.add(s1) db.add(s1)
except ValueError as e:
# 业务校验异常:回滚并返回错误信息
db.rollback()
return {"code": 400, "msg": str(e)}
except Exception: except Exception:
# 这里可以加日志 # 这里可以加日志
db.rollback() db.rollback()
return False return {"code": 500, "msg": f"系统异常: {str(e)}"}
else: else:
db.commit() db.commit()
db.refresh(s1) db.refresh(s1)