FastAPI(八十一)实战开发《在线课程学习系统》接口开发-- 推荐课程列表与课程点赞
一、推荐课程列表
这里的初步逻辑很简单,
1 | 点赞数大于> 500 |
那么我们看下crud
1 2 3 | def getlikeCourse(db:Session): return db.query(Course). filter (Course.likenum> 500 , Course.onsale = = True ). all () |
那么我们看下接口的代码实现。
@courseRouter.get("/recommend") async def recommend(db:Session=Depends(get_db)): allcouese = getlikeCourse(db) all_course = [] if len(allcouese) > 0: for item in allcouese: coursedetail = CousesDetail(id=item.id, name=item.name, icon=item.icon, desc=item.desc, catalog=item.catalog, onsale=item.onsale, owner=get_user(db, item.owner).username, likenum=item.likenum) all_course.append(coursedetail) return reponse(code=200, message='成功', data=jsonable_encoder(all_course))
我们接口用的点赞大于500,那么我们看下如何点赞。
二、课程点赞。
我们看下这里的逻辑
1 2 3 4 | 1. 判断是否登录 2. 判断是否是学生 3. 判断是否点赞过 4. 点赞成功,在redis记录点赞的人 |
对应的状态码更新如下
状态码 | 含义 |
---|---|
200 | 成功 |
102002 | 已经点赞,不能重复点赞 |
102001 | 课程不存在 |
那么我们根据上面的逻辑,去看下对应的代码如何实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @courseRouter .get( "/like/{id}" ) async def like(rquest:Request, id : int ,user: UsernameRole = Depends(get_cure_user),db:Session = Depends(get_db)): course = db_get_course_id(db, id ) if not course: return reponse(code = 102001 ,message = '课程不存在' ,data = '') result = await rquest.app.state.redis.hgetall( str (course. id ) + "_like" , encoding = 'utf8' ) if user.username in result.keys(): return reponse(code = 102002 ,message = '已经点赞,不能重复点赞' ,data = '') username = user.username rquest.app.state.redis.hmset_dict( str (course. id ) + "_like" ,username = 1 ) course.likenum + = 1 db.commit() db.refresh(course) return reponse(code = 200 , message = '成功' , data = course. id ) |
这里我们除了数据库,还用到了之前的redis。
本次的分享到自己这里就结束了。还有最后一篇我们就完成了功能接口的开发。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?