FastAPI(八十一)实战开发《在线课程学习系统》接口开发-- 推荐课程列表与课程点赞
一、推荐课程列表
这里的初步逻辑很简单,
点赞数大于>500
那么我们看下crud
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.点赞成功,在redis记录点赞的人
对应的状态码更新如下
状态码 | 含义 |
---|---|
200 | 成功 |
102002 | 已经点赞,不能重复点赞 |
102001 | 课程不存在 |
那么我们根据上面的逻辑,去看下对应的代码如何实现
@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。
本次的分享到自己这里就结束了。还有最后一篇我们就完成了功能接口的开发。