모르는 상태로 찾아보면서 코드를 짜느라 개발일지를 못썼다.

오늘은 좋아요 기능을 혼자 해보려다 결국 팀원들에게 도움받아 이해한 것을 쓰려고 한다ㅎ


프로필 좋아요 기능

강의를 듣고도 이해하는게 느린 나는 결국 프로젝트 전 1주일 동안 aws 강의를 듣느라 심화 강의를 다 듣지 못했다. 다 듣고 프로젝트를 했다면 조금은 더 잘 해냈을텐데 아쉬움이 남았다!

아무튼! 좋아요 기능을 팀원들에게 물어봐가며 구현할 수 있었다!

app.py 코드↓

@app.route('/dogprofile/like', methods=['POST'])
def profile_like():
    
    profile_id_receive = request.form["id_give"]
    past_like = db.profile.find_one({'number': int(profile_id_receive)}, {'_id': False})
    like_list = past_like['like']

    if my_username in like_list:
        db.profile.update_one({'number': int(profile_id_receive)}, {"$pull": {'like': my_username}})

        return jsonify({'result': 'success', 'msg': '좋아요 취소!'})

    else:
        db.profile.update_one({'number': int(profile_id_receive)}, {"$push": {'like': my_username}})

    pre_like = db.profile.find_one({'number': int(profile_id_receive)}, {'_id': False})
    like_count = len(pre_like['like'])
    db.profile.update_one({'number': int(profile_id_receive)}, {'$set': {'like_count': like_count}})

    return jsonify({'result': 'success', 'msg': '좋아요!'})
  • 우리팀이 만든 홈페이지에 로그인 기능이 있어 로그인을 한 유저가 작성한 프로필을 username(id)로 연결했다.(연결한 부분은 혹시 몰라 생략!)
  • 그리고 각 프로필 카드마다 고유한 id값을 주었다.(db에 number로 저장)
  • $pull, $push를 이용해 like() 안의 좋아요를 누른 사람의 username이 있으면 빼주고 없다면 넣어줌으로써 각 카드당 한번의 좋아요만 할 수 있게 했다.
  1. 좋아요를 클릭하면 클릭된 해당 프로필 카드의 아이디(id_give로부터 받아옴.)를 받아온다.(db에 number로 저장되어있음.)
  2. db에서 해당 프로필 카드 아이디를 가진 리스트를 불러온다.
  3. 불러온 리스트 안의 like() 리스트를 정의한다.(like() = like_list)
  4. if 문을 이용해 like_list 안의 좋아요를 누른 사용자의 아이디 값이 포함되어 있다면 pull을 이용해 빼주고, 포함되어 있지 않다면 push로 넣어주는 것을 update 한다.
  5. push로 username이 들어갔다면 해당 프로필 카드 db의 like_count 값을 like_list의 길이를 구해서(username의 수) update 해준다.

+ Recent posts