项目 10 项目改进与优化(添加收藏功能)
项目 10 项目改进与优化(添加收藏功能)
handlers/main.py 添加实例
class ProfileHandler(AuthBaseHandler): ''' 显示用户上传的图片和喜欢的图片列表 ''' @tornado.web.authenticated def get(self): user = get_user(self.current_user) #获取当前用户的用户名 like_posts = get_like_posts(user)#获取该用户所喜欢的图片的列表 self.render('profile.html',user=user,like_posts=like_posts)
utils/account.py 添加辅助函数
def get_user(username): ''' 根据用户名拿到实例 :param username: :return: ''' user = session.query(User).filter_by(name=username).first() return user def add_like(user,post): ''' 添加喜欢功能 :param user: :param post: :return: ''' like = Like(user_id=user.id,post_id=post.id) session.add(like) session.commit() def get_like_posts(user): ''' 查询用户喜欢的图片的posts :param user: User的实例对象 :return: posts Post 实例的列表 ''' posts = session.query(Post).filter(Like.user_id==user.id,Post.id==Like.post_id).all() return posts def get_like_users(post): ''' 查询该图片有几个用户喜欢 :param post: Post的实例 :return: users User 的实例 ''' users = session.query(User).filter(Like.post_id==post.id,User.id==Like.user_id).all() return users
app.py 添加路由
templates/profile.html 添加profile.html
{% extends 'base.html' %} {% block title %} profile page {% end %} {% block content %} <div class="row col-12"> <div class="card"> <div class="card-header"><h3>用户上传</h3></div> {% for p in user.posts %} <a href="/post/{{ p.id }}"> <img src="{{ static_url(p.thumb_url) }}" class="img-thumbnail"> </a> {% end %} <div class="card col-12"> <div class="card-header"><h3>用户喜欢</h3></div> {% for p in like_posts %} <a href="/post/{{ p.id }}"> <img src="{{ static_url(p.thumb_url) }}" class="img-thumbnail"> </a> {% end %} </div> </div> </div> {% end %}