请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于后端点赞功能的实现

我想用flask尝试去实现下点赞功能的后端API,但是浏览每一个期刊,用户可能有两种状态,一种是登录状态,一种是未登录状态,这两种状态应该都是可以访问期刊的。

如果我加上@auth.login_required,虽然能够拿到用户的id,从而判断用户是否对该期刊进行了点赞,可是这样的话,未登录的用户就无法访问期刊的详情了;

@api.route("/<int:id>/detail", methods=["GET"])
@auth.login_required
def detail(id):
    """获取心情碎片详情"""
    mood = Mood.query.filter_by(id=id).first_or_404()
    uid = g.user.uid
    mood.like_status = 1 if Like.query.filter_by(uid=uid, art_id=mood.id, type=ArtTypeEnum.MOOD.value).first() else 0
    mood.append("like_status")
    return jsonify(mood)

那么,该怎么判断当前用户是登录还是未登录的状态呢,也就是不加上auth.login_required的情况下,如何获取到登录用户的id呢?

下面是我的做法,我是通过从request.headers中获取token,从而判断用户是否登录,请问还有没有更好的做法呢?

@api.route("/<int:id>/detail", methods=["GET"])
def detail(id):
    """获取心情碎片详情"""
    mood = Mood.query.filter_by(id=id).first_or_404()
    mood.like_status = 0
    res = request.headers.get("Authorization")
    if res:
        token = base64.b64decode(res.split()[1]).decode("utf-8")[:-1]
        if token:
            user = verify_auth_token(token)
            mood.like_status = 1 if Like.query.filter_by(uid=user.uid, art_id=mood.id, type=ArtTypeEnum.MOOD.value).first() else 0
    mood.append("like_status")
    return jsonify(mood)

正在回答 回答被采纳积分+3

插入代码

1回答

7七月 2020-05-02 03:35:30

点赞和获取点赞是2个接口。。。

0 回复 有任何疑惑可以回复我~
  • 提问者 Yan雪杉 #1
    可能是我没有表述清楚,我想要实现的是,对于片刊详情页,用户不登录也可以访问,这个时候的点赞状态肯定是未点赞的,那如果登录状态下的访问就不一定是未点赞的状态了,这两种情况该如何处理呢~
    回复 有任何疑惑可以回复我~ 2020-05-02 10:22:31
  • 提问者 Yan雪杉 #2
    如果想要不登录也访问的,就不能加上auth.login_required了,这样的话,如果用户是登录状态下的访问,就不能直接获取到uid了,我的做法就是从header中获取token,从token中获取到uid,但是感觉不是很好,有没有更好的方法来处理这种情况呢~
    回复 有任何疑惑可以回复我~ 2020-05-02 10:26:26
  • 7七月 回复 提问者 Yan雪杉 #3
    不能理解。不登录,怎么就肯定是未点赞的呢。实际上小程序只要打开,用户就已经登录了。是静默登录的。这个 我猜可能你不太了解小程序的登录机制。建议看一下文档。
    回复 有任何疑惑可以回复我~ 2020-05-02 12:39:38
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号