项目 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 %}

 

转载于:https://www.cnblogs.com/xuchengcheng1215/p/9246848.html

你可能感兴趣的:(项目 10 项目改进与优化(添加收藏功能))