모르는 상태로 찾아보면서 코드를 짜느라 개발일지를 못썼다.
오늘은 좋아요 기능을 혼자 해보려다 결국 팀원들에게 도움받아 이해한 것을 쓰려고 한다ㅎ
프로필 좋아요 기능
강의를 듣고도 이해하는게 느린 나는 결국 프로젝트 전 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이 있으면 빼주고 없다면 넣어줌으로써 각 카드당 한번의 좋아요만 할 수 있게 했다.
- 좋아요를 클릭하면 클릭된 해당 프로필 카드의 아이디(id_give로부터 받아옴.)를 받아온다.(db에 number로 저장되어있음.)
- db에서 해당 프로필 카드 아이디를 가진 리스트를 불러온다.
- 불러온 리스트 안의 like() 리스트를 정의한다.(like() = like_list)
- if 문을 이용해 like_list 안의 좋아요를 누른 사용자의 아이디 값이 포함되어 있다면 pull을 이용해 빼주고, 포함되어 있지 않다면 push로 넣어주는 것을 update 한다.
- push로 username이 들어갔다면 해당 프로필 카드 db의 like_count 값을 like_list의 길이를 구해서(username의 수) update 해준다.
'내일배움캠프_강만다(첫 프로젝트)' 카테고리의 다른 글
내일배움캠프 19일차 _ 강만다 프로젝트(9일차)_3주차 회고록 (0) | 2021.10.01 |
---|---|
내일배움캠프 18일차 _ 강만다 프로젝트(8일차) (0) | 2021.10.01 |
내일배움캠프 17일차 _ 강만다 프로젝트(7일차) (0) | 2021.09.30 |
내일배움캠프 16일차 _ 강만다 프로젝트(6일차) (0) | 2021.09.28 |
내일배움캠프 15일차 _ 강만다 프로젝트(5일차) (0) | 2021.09.28 |