FastAPI(七十九)实战开发《在线课程学习系统》接口开发-- 加入课程和退出课程

源码见:"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)

测试

以上就是加入课程和退出课程的接口实现

相关推荐
闲人编程19 小时前
使用FastAPI和WebSocket构建高性能实时聊天系统
websocket·网络协议·网络编程·fastapi·持久化·实时聊天·codecapsule
失忆爆表症1 天前
01_项目搭建指南:从零开始的 Windows 开发环境配置
windows·postgresql·fastapi·milvus
PD我是你的真爱粉1 天前
FastAPI使用tortoiseORM
数据库·fastapi
玄同7652 天前
Python 后端三剑客:FastAPI/Flask/Django 对比与 LLM 开发选型指南
人工智能·python·机器学习·自然语言处理·django·flask·fastapi
张3蜂3 天前
Python 四大 Web 框架对比解析:FastAPI、Django、Flask 与 Tornado
前端·python·fastapi
雪碧聊技术3 天前
ORM简介、安装、使用流程
fastapi·orm·基础代码编写
曲幽3 天前
FastAPI实战:用懒加载与Lifespan优雅管理重型依赖
fastapi·async·lifespan·lazy loading·startup event
雪碧聊技术3 天前
ORM-查询
fastapi·orm·查询
Li emily3 天前
解决港股实时行情数据 API 接入难题
人工智能·python·fastapi
yuezhilangniao3 天前
AI智能体全栈开发工程化规范 备忘 ~ fastAPI+Next.js
javascript·人工智能·fastapi