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