FastAPI(八十一)实战开发《在线课程学习系统》接口开发-- 推荐课程列表与课程点赞

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

推荐课程列表

逻辑很简单

点赞数 > 500

那么符合要求的课程是:

def get_like_course(db: Session):"""获取推荐课程(点赞数超500的课程)"""return db.query(Course).filter(Course.like_num > 500, Course.status == False).all()def like_method(db: Session):"""返回推荐课程逻辑"""try:all_likes = get_like_course(db)to_client = []if all_likes:for _ in all_likes:course_detail = CourseDetail(id=_.id,name=_.name,icon=_.icon,desc=_.desc,catalog=_.catalog,onsale=_.onsale,owner=get_by_uid(db, _.owner).username,like_num=_.like_num)to_client.append(course_detail.dict())except:logger.warning(f"method like_method error: {traceback.format_exc()}")return response(code=101801, message="查询错误")return response(data=to_client)

接口api

@course_router.get("/like", summary="获取推荐课程")
def like(db: Session = Depends(create_db)):return like_method(db)

测试:

我们推荐课程用的点赞数大于500的,那么我们看下如何点赞

点赞课程

1.是否登录

2.是否是学生

3.是否点赞过

4.点赞成功,redis记录点赞的人

对应的状态码更新如下

状态码含义
200成功
102002已经点赞,不能重复点赞
102001课程不存在

逻辑实现如下:
 

async def add_like_method(request: Request, course_id: int, user: UsernameRole, db: Session):"""点赞课程"""db_course = get_course_by_id(db, course_id)if not db_course:return response(code=102001, message="课程不存在")if user.role != "学生":return response(code=102004, message="只有学生才可以点赞")like_key = str(db_course.id) + "_like"redis_result = await request.app.state.redis.hgetall(like_key, encoding="utf-8")username = user.usernameif username in redis_result.keys():return response(code=102002, message="不能重复点赞")try:await request.app.state.redis.hmset_dict(like_key, {username: 1})db_course.like_num += 1db.commit()db.refresh(db_course)except:logger.warning(f"method add_like_method error: {traceback.format_exc()}")return response(code=102003, message="点赞失败")return response()

接口api

@course_router.post("/like", summary="点赞课程")
async def add_like(request: Request, course_id: int, user: UsernameRole = Depends(get_current_user), db: Session = Depends(create_db)):return await add_like_method(request, course_id, user, db)

测试

以上测试推荐课程列表和点赞课程的接口逻辑

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

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

相关文章

用Redisson的RMap做一个简单的购物车示例

RMap是Redisson提供的一个高级数据结构,它封装了Redis中的Hash数据类型,提供了一个类似Java HashMap的接口。RMap非常适合在需要分布式共享的键值对集合场景中使用,以下是一些典型的应用场景: 分布式缓存: RMap可以用作…

一番赏小程序搭建,线上一番赏市场

一番赏作为一个经久不衰的潮流市场,一直流行于消费者市场中。一番赏商品拥有不同系列,涵盖了热门动漫、漫画、影视等主题,商品包含了手办等周边商品,具有非常大的收藏价值。相比于其他潮玩模式,一番赏的性价比更高&…

Kylin 入门教程

Apache Kylin 是一个开源的分布式数据仓库和 OLAP(在线分析处理)引擎,旨在提供亚秒级查询响应时间,即使在处理超大规模数据集时也是如此。Kylin 可以有效地将原始数据预计算为多维数据立方体(Cube),并利用这些预计算结果来提供快速查询。本文将带你从基础知识到操作实践…

深入 Symfony 服务容器:依赖注入的艺术

“深入 Symfony 服务容器:依赖注入的艺术” 是一个涵盖了 Symfony 服务容器核心概念和依赖注入机制的复杂话题。为了全面理解 Symfony 服务容器的运作,我们将详细探讨以下几个方面: 服务容器的概念和作用依赖注入的基本原理Symfony 服务容器…

MavLink通信协议 C++应用详细教程

https://blog.csdn.net/qq_44070755/article/details/122222337

Git(分布式版本控制系统)、Gitlab、分支、分支冲突

目录 1.Git概述 2.Git的功能特性 3.Github社区和Gitlab 1.Github社区 2.Gitlab 4.Git的安装及配置 1.Git安装 2.配置Git环境 3.常用指令 4. 建立git仓库 1.创建一个目录 2.初始化当前目录仓库 3.查看隐藏文件 4.新建文件并添加到缓存 5.提交文件到仓库 6.查看历…

GC(垃圾收集)简析:为什么Java需要它?

GC(垃圾收集)简析:为什么Java需要它? 1、什么是GC?2、为什么Java需要GC?3、总结 💖The Begin💖点点关注,收藏不迷路💖 1、什么是GC? GC&#xff…

黄果树瀑布

早上我们按计划6点吃饭,可是酒店没水了,等我们吃完饭已经近七点 ,到景区已经7点多了。景区入口的人特别多,验过包裹,只刷脸就进去了。排队坐大巴,向左是陡坡塘和七星桥。 第一站陡坡塘,服务中心…

synergy Ubuntu 18 和Windows 配置

下载链接 Windows 版本 https://altushost-swe.dl.sourceforge.net/project/synergy-stable-builds/v1.8.8-stable/synergy-v1.8.8-stable-Windows-x64.msi?viasf1Ubuntu 18 版本 sudo apt-get install synergy配置方式 我这边配置需求是 笔记本电脑(Windows系统…

为什么用LeSS?

实现适应性 LeSS是一个产品开发的组织系统,旨在最大化一个组织的适应性。关于适应性(或者敏捷性,也就是敏捷开发的初衷)我们是指优化: 以相对低的成本改变方向的能力,主要是基于通过频繁交付产生的探索。从…

基于微信小程序的搬家服务系统(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 涉及技术栈:SpringBoot、Vue、SSM、H…

【PostgreSQL 16】专栏日常

本专栏从 3 个月前开始着手准备&#xff0c;利用周末及节假日的时间来整理。 ldczzDESKTOP-HVJOUVN MINGW64 ~/mypostgres (dev) $ git lg |tee * 7a7f468 - (HEAD -> dev, origin/main, origin/dev, main) 完成服务端编程的初步整理 (6 minutes ago) <Laven Liu> * …

将手机作为服务器运行docker服务

前言 目前手机的配置并不低&#xff0c;即使是2019年生产的一加七Pro&#xff0c;配置也有12256&#xff0c;CPU是骁龙855&#xff0c;作为服务器运行着配置绰绰有余了&#xff0c;二手的价格现在是400左右也能接受。相对于是自带ups电源的便携低耗docker服务器&#xff0c;还…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十一章 Linux内核定时器

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十二章 LED驱动实验

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【python014】Python爬取并解析潮汐天气简报-潮历数据

1.欢迎点赞、关注、批评、指正&#xff0c;互三走起来&#xff0c;小手动起来&#xff01; 【python014】Python爬取并解析潮汐天气简报-潮历数据&#xff0c;源代码下载【python014】Python爬取并解析潮汐天气简报-潮历数据&#xff0c;源代码下载【python014】Python爬取并解…

EtherNet/IP转Profinet协议转化网关(功能与配置)

如何将EtherNet/IP和Profinet网络连接通讯起来呢?近来几天有几个朋友问到这个问题&#xff0c;那么作者在这里统一说明一下。其实有一个不错的设备产品可以很轻易地解决这个问题&#xff0c;名为捷米特JM-PN-EIP。接下来作者就从该设备的功能及配置详细说明一下。 一&#xf…

Leetcode283. 移动零(java实现)

今天分享的题目是leetcode283移动0&#xff08;成都人狂喜&#xff09; 先来看下题目描述 这道题目我也看了官方的题解感觉有点冗余了。 那么我们就不用官方的题解了&#xff0c;分享下我们自己的解体方式。 解题步骤&#xff1a;1.找到非0元素&#xff0c;如果是非0进行记录2…

【C++】utf-8 与string、wstring 转换实现(code)

c++ utf-8 字符 转 string 或者转为 Unicode 的 wstring 代码实现 注意:本代码支持跨平台实现(linux \ windows) 代码如下: 头文件: /******************************************************@Copyright (c) 2024, GhY, All rights reserved.*@文件 UTF8CodeTrans…

网站重构怎么进行

网站重构是一项复杂的任务&#xff0c;涉及许多方面&#xff0c;从技术实现到用户体验的提升。以下是进行网站重构的详细步骤&#xff1a; 1. 需求分析 首先要明确重构的目标和需求&#xff0c;包括功能需求、性能要求以及用户体验的改进点。这需要与利益相关者&#xff08;如…