关于后端点赞功能的实现

来源:12-7 书籍详情页面三组数据加载

Yan雪杉

2020-05-02

我想用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)
写回答

1回答

7七月

2020-05-02

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

0
3
7七月
回复
Yan雪杉
不能理解。不登录,怎么就肯定是未点赞的呢。实际上小程序只要打开,用户就已经登录了。是静默登录的。这个 我猜可能你不太了解小程序的登录机制。建议看一下文档。
2020-05-02
共3条回复

纯正商业级微信小程序应用实战,全方位小程序特性讲解

真实数据的高质量小程序项目,学会直接工作

4782 学习 · 2125 问题

查看课程