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)

测试

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

相关推荐
白嫖不白嫖4 小时前
Django、Flask、FastAPI与Jupyter对比
django·flask·fastapi
一刀到底2115 小时前
Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合
python·django·fastapi
fengbingchun18 小时前
线性规划饮食问题求解:FastAPI作为服务端+libhv作为客户端实现
fastapi·libhv·pyomo
zhangsan093321 小时前
web框架(Django 与 FastAPI)
django·fastapi
jingyucsdn1 天前
网页端 VUE+C#/FastAPI获取客户端IP和hostname
网络协议·tcp/ip·fastapi
掘金-我是哪吒3 天前
分布式微服务系统架构第144集:FastAPI全栈开发教育系统
分布式·微服务·架构·系统架构·fastapi
jingyucsdn9 天前
AsyncIOScheduler与BackgroundScheduler的线程模型对比
fastapi
jingyucsdn10 天前
FastAPI集成APsecheduler的BackgroundScheduler+mongodb(精简)
fastapi
几道之旅10 天前
前端antd,后端fastapi,解决文件上传
前端·fastapi
Hello_WOAIAI11 天前
python中使用高并发分布式队列库celery的那些坑
python·fastapi