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 = Truedb_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)

测试

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/50668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++——QT:保姆级教程,从下载到安装到用QT写出第一个程序

登录官网,在官网选择合适的qt版本进行下载 这里选择5.12.9版本 点击exe文件下载,因为服务器在国外,国内不支持,所以可以从我的网盘下载 链接: https://pan.baidu.com/s/1XMILFS1uHTenH3mH_VlPLw 提取码: 1567 --来自百度网盘超级…

本地部署Graphhopper路径规划服务(graphhopper.sh启动版)

文章目录 文章参考源码获取一、配置Java环境变量二、配置Maven环境变量三、构建graphhopper步骤1. 下载数据2. 配置graphhopper配置文件config-example.yml3. 在项目中启动命令行执行./graphhopper.sh build3.1|、遇到的问题3.1.1、pom.xml中front-maven-plugin-无法下载npm6.1…

土耳其云手机提升TikTok电商效率

在数字化飞速发展的今天,TikTok不仅是一个社交平台,更是一个巨大的电商市场。随着TikTok电商功能在全球范围内的扩展,土耳其的商家和内容创作者正面临着前所未有的机遇。本文将详细介绍土耳其云手机怎样帮助商家抓住机遇,实现业务…

项目都做完了,领导要求国际化????--JAVA后端篇

springboot项目国际化相信各位小伙伴都会,很简单,但是怎么项目都做完了,领导却要求国际化文件就很头疼了 国际化的SpringBoot代码: 第一步:创建工具类 /*** 获取i18n资源文件** author bims*/ public class Message…

MATLAB怎么实现多条曲线共用一个图例

y1 sin(x); y2 3*sin(x); y3 cos(x); y4 3*cos(x); 例子:如果我们有4条曲线,分布是cos类和sin类,我们的图例就想区分是cos类还是sin类。 第一步(关键步骤) 我们要把我们所需要的类别曲线先画一遍, …

《Programming from the Ground Up》阅读笔记:p75-p87

《Programming from the Ground Up》学习第4天,p75-p87总结,总计13页。 一、技术总结 1.persistent data p75, Data which is stored in files is called persistent data, because it persists in files that remain on disk even when the program …

用 apifox cli 命令行运行本地接口出现TypeError:Invalid IP address: undefined

用 apifox cli 命令行运行本地接口出现TypeError:Invalid IP address: undefined,客户端运行是通过的但命令行运行会报错 修改端口也是一样报错,地址修改为127.0.0.1会报错connect ECONNREFUSED 127.0.0.1:8080 解决方法:不用localhost&…

智能合约在能源行业中的应用:促进可再生能源的发展与利用

随着全球能源需求的增长和环境保护意识的提升,可再生能源作为替代传统能源的重要选择,正逐步成为能源供应的主流。本文将探讨智能合约在能源行业中的应用,特别是如何通过智能合约促进可再生能源的发展与利用。 可再生能源的重要性与挑战 可再…

react中使用forwardRef获取子组件中的节点以及子组件的方法(useImperativeHandle的使用)

1.forwardRef的使用 import { forwardRef, useRef } from "react"const Son forwardRef((props, ref)> {return (<input type"text" ref{ref} id"kannoId"/>) })function ForwardRef() {const sonRef useRef(null)const showRef ()…

Javascript前端面试基础5【每日更10】

let与var的区别 let命令不存在变量提升&#xff0c;如果在let前使用&#xff0c;会导致报错&#xff08;var存在变量提升&#xff09;如果块区中存在let和const命令&#xff0c;就会形成封闭作用域不允许重复声明&#xff0c;因此&#xff0c;不能在函数内部重新声明参数 m…

基于Qt的视频剪辑

在Qt中进行视频剪辑可以通过多种方式实现&#xff0c;但通常需要使用一些额外的库来处理视频数据。以下是一些常见的方法和步骤&#xff1a; 使用FFmpeg FFmpeg是一个非常强大的多媒体框架&#xff0c;可以用来处理视频和音频数据。你可以使用FFmpeg的命令行工具或者其库来实现…

YOLOv8魔改核心-模型yaml文件解析与网络结构打印

前言 本篇文章主要用于记录学习YOLOv8中网络模型yaml文件&#xff0c;我们一般只知道如何去训练模型&#xff0c;和配置yaml文件&#xff0c;但是对于yaml文件是如何输入到模型里&#xff0c;模型如何将yaml文件解析出来的确是不知道的&#xff0c;下面我们从yaml文件来讲解&a…

python+vue3+onlyoffice在线文档系统实战20240726笔记,左侧菜单实现和最近文档基本实现

解决右侧高度过高的问题 解决方案&#xff1a;去掉右侧顶部和底部。 实现左侧菜单 最近文档&#xff0c;纯粹文档 我的文档&#xff0c;既包括文件夹也包括文件 共享文档&#xff0c;别人分享给我的 基本实现代码&#xff1a; 渲染效果&#xff1a; 简单优化 设置默认菜…

RT-Thread Studio搭建 Renesa Version Board开发环境

目录 概述 1 认识Version Board 1.1 Vision-Board简介 1.2 Vision-Board的资源 2 搭建Version Board开发环境 2.1 RT Thread Studio 2.2 安装SDK 3 开发环境验证 3.1 创建项目 3.2 编译和下载 概述 本文主要介绍使用RT-Thread Studio搭建 Renesa Version Board开发环…

c语言第四天笔记

关于 混合操作&#xff0c;不同计算结果推理 第一种编译结果&#xff1a; int i 5; int sum (i) (i) 6 7 13 第二种编译结果&#xff1a; int i 5; int sum (i) (i) 6 7 7 7 前面的7是因为后面i的变化被影响后&#xff0c;重新赋值 14 第一种编译结果&#xff…

Html+Css网页开发之动态登录页面(默认Chrome)

>>效果展示图<< 一、需求分析与设计要求 实现了一个动态背景图案的效果&#xff0c;包括一个白色的容器&#xff0c;内部有一个标题、一个输入框、一个按钮和一些文本。 背景是一个渐变色的线性渐变&#xff0c;而在容器的周围&#xff0c;有一些随机的方形和圆形图…

【CN】Argo 持续集成和交付(一)

1.简介 Argo 英 [ˈɑ:ɡəu] 美 [ˈɑrˌɡo] Kubernetes 原生工具&#xff0c;用于运行工作流程、管理集群以及正确执行 GitOps。 Argo 于 2020 年 3 月 26 日被 CNCF 接受为孵化成熟度级别&#xff0c;然后于 2022 年 12 月 6 日转移到毕业成熟度级别。 argoproj.github.i…

【数学建模】权重生成与评价模型(下)

文章目录 权重生成与评价模型&#xff08;下&#xff09;5. 模糊综合评价法5.1 模糊综合分析法的原理5.2 模糊综合分析法的案例 6. 秩和比分析法6.1 秩和比分析法原理6.2 秩和比分析法案例6.3 RSR的分布及其计算确定RSR的分布计算回归方程示例代码实现代码解释 6.4 秩和比分析法…

Godot入门 02玩家1.0版

添加Node2D节点&#xff0c;重命名Game 创建玩家场景&#xff0c;添加CharacterBody2D节点 添加AnimatedSprite2D节点 从精灵表中添加帧 选择文件 设置成8*8 图片边缘模糊改为清晰 设置加载后自动播放&#xff0c;动画循环 。动画速度10FPS&#xff0c;修改动画名称idle。 拖动…

【数据结构初阶】单链表经典算法题十二道——得道飞升(上篇)

目录 1、移除元素 2、反转链表 3、链表的中间节点 4、合并两个有序链表 Relaxing Time&#xff01;&#xff01;&#xff01; ———————————————— 天气之子幻 ———————————————— 1、移除元素 思路&#xff1a; 创建一个新链表&#xff0…