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。

本次的分享到自己这里就结束了。还有最后一篇我们就完成了功能接口的开发。

        

posted @ 2022-04-04 10:06  北漂的雷子  阅读(250)  评论(0编辑  收藏  举报