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)

测试

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

相关推荐
杜小白也想的美1 小时前
FlaskAPI-路径参数、查询参数
python·fastapi
小豆豆儿5 小时前
【FastAPI】中间件
python·中间件·fastapi
叼奶嘴的超人12 小时前
Gitlab17.7+Jenkins2.4.91实现Fastapi项目持续发布版本详细操作(亲测可用)
fastapi·gitlab17.7·jenkins2.4.91
杜小白也想的美1 天前
FlaskAPI-初识
python·fastapi
老大白菜6 天前
FastAPI vs Go 性能对比分析
开发语言·golang·fastapi
卡卡大怪兽6 天前
fastAPI接口的请求与响应——基础
服务器·网络·fastapi
_.Switch7 天前
FastAPI 的进阶应用与扩展技术:异步编程与协程、websocket、celery
网络·数据库·python·websocket·网络协议·性能优化·fastapi
m0_748249547 天前
利用 FastAPI 和 Jinja2 模板引擎快速构建 Web 应用
前端·python·fastapi
Sherry Wangs7 天前
API开发:Flask VS FastAPI
后端·python·fastapi
_.Switch11 天前
FastAPI 应用生产环境部署与性能优化
开发语言·前端·数据库·python·性能优化·fastapi