源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统"
加入课程
我们先看下加入课程
1.是否登录
2.课程是否存在
3.是否已经存在
4.添加
首先实现逻辑
def get_student_course(db: Session, course: int, student: int):
"""查询学生名下某个课程"""
return db.query(StudentCourse).filter(
StudentCourse.course == course, StudentCourse.student == student,
StudentCourse.status == False).first()
def add_student_course(course_id: int, user: UsernameRole, db: Session):
"""添加课程"""
if user.role == "教师":
return response(code=101503, message="老师不能加入课程")
db_course = get_course_by_id(db, course_id)
if not db_course:
return response(code=101501, message="课程不存在")
db_user = get_by_username(db, user.username)
exists = get_student_course(db, db_course.id, db_user.id)
if exists:
return response(code=101502, message="课程不能重复加入")
try:
s_course = StudentCourse(
student=db_user.id,
course=db_course.id
)
db.add(s_course)
db.commit()
db.refresh(s_course)
except:
logger.warning(f"加入课程:{db_course.name} 失败")
return response(code=101504, message="课程加入失败")
return response()
然后实现接口api
@course_router.post("/student_course", summary="加入课程")
def add(course_id: int, user: UsernameRole = Depends(get_current_user), db: Session = Depends(create_db)):
return add_student_course(course_id, user, db)
测试:
退出课程
接下来看下退出课程
1.是否登录
2.登录用户必须是学生才可以退出
3.课程是否存在于学生的课程表
4.存在则退出
还是先实现逻辑
def del_student_course(course_id: int, user: UsernameRole, db: Session):
"""退出课程"""
if user.role == "老师":
return response(code=101603, message="老师不能退出课程")
db_user = get_by_username(db, user.username)
db_student_course = get_student_course(db, course_id, db_user.id)
if not db_student_course:
return response(code=101602, message="课程不在自己课表内")
try:
db_student_course.status = True
db_student_course.update_time = datetime.now()
db.add(db_student_course)
db.commit()
db.refresh(db_student_course)
except:
logger.warning(f"退出课程:{course_id} 失败")
return response(code=101601, message="退出课程失败")
return response()
再实现接口api
@course_router.put("/student_course", summary="退出课程")
def out(course_id: int, user: UsernameRole = Depends(get_current_user), db: Session = Depends(create_db)):
return del_student_course(course_id, user, db)
测试
以上就是加入课程和退出课程的接口实现