TIL #64 : [Django] 인스타그램 좋아요 및 팔로우 기능

셀레스틴 허·2021년 2월 10일
2
post-thumbnail

posting 앱에서 좋아요 및 팔로우 기능도 진행한다! 다른 앱을 만들어도 무방하다.

1. 좋아요 기능


좋아요 기능 파악

1.1) 게시물 '좋아요'할 때 필요한 요소

  1. 좋아요 누른 사용자
  2. 좋아요 누른 게시물 이미지/사진
  3. 좋아요 누른 시간

1.2) 코드

1.2.1) model.py

  1. like_username은 User 앱을 FK로 연결한다.
  2. posting_photo는 Posting 앱을 FK로 연결한다.
  3. liked_atcreated_at처럼 DTF auto_now_add=True로 생성시간을 담는다.

1.2.2) views.py

좋아요 등록(POST) 및 나열(GET) 로직:

GET

다른 GET 기능들 처럼 list를 선언하고 해당 값들을 append한다. 이전 포스팅에 상세하게 다뤘다!

POST

좋아요 기능도 .get() 함수를 활용해서 사용자, 또는 게시물이 없을 경우 None 값을 받을 수 있도록 설정했다. 좋아요 누를 때 사용자(user_id)가 갑자기 비활성화 했을 수도 있고, 게시물을 갑자기 삭제(posting_id)할 수 있기 때문에 해당 조건문을 작성했다.(하지만 이 조건이 필요한지 잘 모르겠다..)

설정한 조건문들을 다 통과하면 성공적으로 Like.objects.create()으로 게시물을 좋아요 누를 수 있다!

2. 팔로우 기능


팔로우 기능 파악

2.1) 사용자 팔로우 할 때 필요한 요소

  1. 팔로우(follower)하는 User의 FK id
  2. 팔로우(following) 당하는 User의 FK id

둘 다 하나의 테이블을 참조하는 흔하지 않은 케이스다.
그리고 follow는 User 앱 안에서 구현했다. (x Posting 앱)

2.2) 코드

2.2.1) model.py

2.2.3) views.py

Follow, Unfollow 로직:

프론트에서 follower, following id를 넘겨주면 우리는 이 둘을 User.objects.get()을 통해 데이터베이스에서 가져와야 한다. 만약 follower, following id가 데이터베이스에 없을 경우 우리는 INVALID 하다고 error를 띄운다.

filter().exists()를 통해 팔로우와 언팔로우 기능을 구현하는 포스팅을 따로 만들었다.

만약 follower, following id가 follows table안에 존재한다면 나는 delete()을, 만약 해당 id가 존재하지 않는다면 create()을 통해 언팔로우와 팔로우를 구현했다~

같은 테이블을 참조해서 더 복잡하게 생각한 것 같다. m2m, fk 앞에서 기죽지말고 기본 베이스에 충실하자!

profile
Software Developer / 고통은 필연, 괴로움은 선택

2개의 댓글

comment-user-thumbnail
2021년 3월 31일

잘 참고하고 갑니다!

1개의 답글