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)

测试

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

相关推荐
曲幽12 小时前
FastAPI配置管理避坑指南:从硬编码到 .env 与 pydantic_settings 类,连路由用法都给你捋清楚
python·fastapi·web·settings·config·pydantic·.env·dotenv·.env.prod
世界尽头与你15 小时前
FastAPI Swagger Api 接口未授权访问漏洞
安全·网络安全·渗透测试·fastapi
rannn_11117 小时前
【FastAPI|快速入门】第一个FastAPI程序、路由、参数、相应类型、自定义响应数据格式、异常响应处理
python·ai·fastapi·web·开发
java1234_小锋19 小时前
FastAPI + Vue 3 前后端分离:项目设计与工程实践(偏“能落地”的最佳实践)
前端·vue.js·fastapi
曲幽2 天前
FastAPI 文件上传避坑全指南:分块存盘、类型校验与安全兜底
python·upload·fastapi·web·file·chunk·validate·filetype
尘埃落定wf2 天前
FastAPI 鉴权怎么写?中间件和依赖注入一次说清楚
python·中间件·fastapi
曲幽2 天前
FastAPI + Pydantic 模型终极实战手册:从能跑就行到固若金汤,这些技巧你一定用得上
python·fastapi·web·model·field·pydantic·validator·basemodel
L-影2 天前
吃透FastAPI的响应类型
fastapi·响应类型
尘埃落定wf3 天前
用 FastAPI 将 LangChain Agent 封装成对外接口
langchain·fastapi
曲幽4 天前
FastAPI + SQLAlchemy 2.0 通用CRUD操作手册 —— 从同步到异步,一次讲透
python·fastapi·web·async·sqlalchemy·session·crud·sync·with