根据是否喜欢

时间:2019-07-03 21:51:37

标签: python sql flask jinja2

我正在尝试在烧瓶中的用户体育馆评论中加入“喜欢/不喜欢”按钮。如果用户不喜欢评论,我想显示“喜欢”按钮,如果用户已经喜欢,则显示“不喜欢”按钮。

我的数据库已设置好,所以我有一个用户表,一个评论表和一个喜欢的表,这些表通过外键引用了用户表和评论表。当用户喜欢时,一条记录会插入到喜欢的表中,而当用户喜欢时,该记录将被删除。

我当前的应用程序具有一条路线,该路线列出了健身房的详细信息及其所有评论。如果用户已登录,则用户可以编辑/删除他们自己的评论,并且喜欢/不喜欢其他人的评论。

如果用户不喜欢我如何显示“喜欢”按钮,如果用户已经喜欢该评论如何显示“不喜欢”?

健身房路线

@bp.route("/gyms/<int:gym_id>")
def gym(gym_id):

gym = db.execute("SELECT * FROM gyms JOIN locations ON locations.id = gyms.location WHERE gyms.id = :id", {"id": gym_id}).fetchone()

ratings = db.execute("""SELECT gym_id, reviews.rating, reviews.rating_training, reviews.rating_facility, 
                        reviews.rating_location, reviews.review, reviews.review_date, users.username, 
                        users.id AS userid, reviews.stay_length, reviews.id AS reviewid, COUNT(likes.liked) as count
                        FROM reviews 
                        JOIN users ON users.id = reviews.user_id 
                        LEFT JOIN likes ON reviews.id = likes.review_id
                        WHERE gym_id = :gym_id 
                        GROUP BY reviews.id, users.username, users.id
                        ORDER BY reviews.review_date DESC""", {"gym_id": gym_id}).fetchall()  

return render_template("main_app/gym.html", gym = gym, ratings = ratings)

喜欢路线

@bp.route('/<int:id>/like', methods=['POST'])
@login_required
def like_review(id):

error = None
user_id = session.get('user_id')
gym = get_gym(id)

if db.execute("SELECT * FROM likes WHERE review_id = :review_id AND user_id = :user_id", {"review_id": id, "user_id": user_id}).rowcount != 0:
    error = "You already liked this review!"

if error is None:
    db.execute("INSERT INTO likes (review_id, user_id, liked) VALUES (:review_id, :user_id, :liked)", {"review_id": id, "user_id": user_id, "liked": "1"})
    db.commit()

    flash('Liked!', category='success')
    return redirect(url_for('main_app.gym', gym_id = gym['gym_id']))

flash(error, 'error')

return redirect(url_for('main_app.gym', gym_id = gym['gym_id']))

gym.html Jinja模板代码段:

{% for rating in ratings %}

  ......
     {% if g.user['id'] == rating['userid'] %}
         (show Edit/Delete review buttons)

     {% elif g.user %}
          (currently shows both like/unlike buttons) ****will like to change***

     {% endif %}
   ..........
{% else %}
  ...........
{% endfor %}

我试图考虑我可以在健身房路线中写些什么查询,然后传递给模板,这样它将知道用户是否喜欢某个评论。

0 个答案:

没有答案