FastAPI(七十六)实战开发《在线课程学习系统》接口开发-- 课程详情

devtools/2024/9/25 21:24:58/

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统"

这个接口用户可以不登录,因为我们的课程随意浏览

那么我们梳理下这里的逻辑

1.根据课程id判断课程是否存在

2.课程需要返回课程的详情

3.返回课程的评论

首先,我们去设计对应的pydantic类,course_schema.py

class CourseCommentBase(BaseModel):user: strpid: intadd_time: strcontext: strclass CourseComment(CourseCommentBase):id: inttop: intclass CourseDetail(Courses):id: intowner: str  # 此处重写该字段,返回给客户端时展示用户名而非idcomment: List[CourseComment] = []

下面是具体逻辑:course_method.py

def get_course_by_id(db: Session, id: int):"""根据课程id获取课程"""return db.query(Course).filter(Course.id == id, Course.status == False).first()def get_comment_by_course_id(db: Session, course_id: int):return db.query(CourseComment).filter(CourseComment.course == course_id, CourseComment.status == False).all()def get_course_detail(course_id: int, db: Session):"""获取课程详情"""db_course = get_course_by_id(db, course_id)if not db_course:return response(code=101101, message="该课程不存在")try:course_detail = CourseDetail(id=db_course.id,name=db_course.name,icon=db_course.icon,desc=db_course.desc,catalog=db_course.catalog,onsale=db_course.onsale,owner=get_by_uid(db, db_course.owner).username,like_num=db_course.like_num)course_comments = get_comment_by_course_id(db, db_course.id)to_client_comments = []if course_comments:for _ in course_comments:detail_comment = CourseComment(id=_.id,top=_.top,user=get_by_uid(db, _.user).username,pid=_.id,add_time=str(_.add_time),context=_.context)to_client_comments.append(detail_comment)course_detail.comment = to_client_commentsexcept:logger.warning(f"查看课程详情失败")return response(code=101102, message="查看详情失败")return response(data=course_detail.dict())

最后实现我们的接口api,course.py

@course_router.get("/", summary="获取课程详情")
def detail(course_id: int, db: Session = Depends(create_db)):return get_course_detail(course_id, db)

测试:

以上就是我们的课程详情接口,等评论接口开发好后回头再测试一下该接口


http://www.ppmy.cn/devtools/86232.html

相关文章

AI学习指南机器学习篇-强化学习基础

AI学习指南机器学习篇-强化学习基础 强化学习基本概念 强化学习是一种通过智能体与环境交互学习的机器学习方法。在强化学习中,智能体通过观察环境的状态,执行某些动作并根据环境的反馈获得奖励来学习如何最大化长期累积奖励。强化学习主要涉及以下基本…

使用 Socket和动态代理以及反射 实现一个简易的 RPC 调用

使用 Socket、动态代理、反射 实现一个简易的 RPC 调用 我们前面有一篇 socket 的文章,再之前,还有一篇 java动态代理的文章,本文用到了那两篇文章中的知识点,需要的话可以回顾一下。 下面正文开始: 我们的背景是一个…

Excel基本操作(二)

1、单元格格式(开始->数字) (1)文本格式:默认左对齐(左上角有绿色小三角标) 常规格式(数值格式):默认右对齐,该格式下公式计算才可用 可以右…

自定义视图提示:提升Laravel用户体验的秘诀

自定义视图提示:提升Laravel用户体验的秘诀 在Laravel框架中,视图提示是一种向用户显示友好信息的方式,它们可以是表单输入后的错误信息、成功通知或其他重要的用户反馈。自定义视图提示不仅可以增强用户体验,还可以使应用程序的…

Matlab编程资源库(19)级数与符号方程求解

一、级数符号求和 求无穷级数的和需要 符号表达式求和函数 symsum ,其调用 格式为: symsum(s,v,n,m) 其中 s 表示一个级数的通项,是一个符号表达式。 v 是求和变 量, v 省略时使用系统的默认变量。 n 和 m 是求和的开始项 和…

ASPICE如何确保汽车软件产品质量的稳固基石

ASPICE通过一系列的方法和原则来保障汽车软件产品的质量,以下是其保障产品质量的几个关键方面: 制定明确的质量方针和目标: ASPICE要求组织制定明确的质量方针和目标,这些方针和目标与客户需求和预期相一致。 开发团队需要定义软…

机器学习 | 分类算法原理——似然函数

Hi,大家好,我是半亩花海。接着上次的逻辑回归继续更新《白话机器学习的数学》这本书的学习笔记,在此分享似然函数这一分类算法原理。本章的分类算法原理基于《基于图像大小进行分类》项目,欢迎大家交流学习! 目录 一、…

PCDN技术与传统CDN技术相比,有哪些优势?

PCDN技术与传统CDN技术相比,具有以下几个优势: 1.更高的扩展性和灵活性:PCDN技术利用用户设备之间的P2P连接进行内容分发,不依赖于中心化的服务器。这种去中心化的架构使得PCDN具有更高的扩展性和灵活性,可以更好地适应大规模、高并发的内容…