Django로 instagram 만들기 (9) - 댓글

swb·2022년 11월 28일
0

django

목록 보기
9/11
  • model을 중간에 바꾸는 일은 상당히 risk가 크기 때문에 서비스를 중단하거나 사용자 접속이 적은 시간에 진행한다.

1. 피드 구성

(1) feed 테이블
(2) 유저 테이블
(3) 좋아요 테이블
(4) 댓글 테이블

  • 좋아요와 댓글은 수시로 바뀌기 때문에 따로 구성해줘야 한다.
    피드는 위의 4가지 테이블을 한 번에 불러오면 된다.

2. 좋아요, 댓글 모델 생성

  • 1번 글에 좋아요 누르면
    1 abc@gmail.com Y 이런식으로 저장이 될 것이다.
    취소하면 Y->N으로 변경하는 방법(write->update)과
    아예 지우는 방법(write->delete)이 있을 것이다.
    전자의 방법을 이용해서 진행할 것이다.
class Like(models.Model):
    feed_id = models.IntegerField(default=0) # 어떤 글을 좋아요 눌렀는지 알기 위해
    email = models.EmailField(default='') # 좋아요 누른 사람
    is_like = models.BooleanField(default=True) # 좋아요 눌렀는지
    
class Reply(models.Model):
    feed_id = models.IntegerField(default=0)
    email = models.EmailField(default='')
    reply_content = models.TextField() # 댓글 내용
  • 댓글(내용, 댓쓴이)과 피드(사진, 좋아요, 댓글, 프사, 이름)의 내용 API.

views.py

feed_object_list = Feed.objects.all().order_by('-id')  # 피드에 있는 모든 데이터를 가져옴(쿼리셋) = select * from content_feed, 최신 글을 위한 역순 출력
feed_list = []

for feed in feed_object_list:
    user = User.objects.filter(email=feed.email).first()
    reply_object_list = Reply.objects.filter(feed_id=feed.id)
    reply_list = []
    # 댓글들
    for reply in reply_object_list:
        user = User.objects.filter(email=reply.email).first()
        reply_list.append(dict(reply_content=reply.reply_content,
                               nickname=user.nickname))
    # 피드
    feed_list.append(dict(id=feed.id,
                          image=feed.image,
                          content=feed.content,
                          like_count=feed.like_count,
                          profile_image=user.profile_image,
                          nickname=user.nickname,
                          reply_list=reply_list
                          ))

3. 댓글 업데이트

  • 어떤 피드에 댓글을 다는지, 댓글 단 사람은 누구인지, 댓글 내용은 무엇인지를 알아야한다.
let feed_id = event.target.attributes.getNamedItem("feed_id").value;
let reply_id = 'reply_' + feed_id;
let reply_content = $('#' + reply_id).val();
  • 댓글을 게시하면 웹 상에 바로 표시가 되어야 한다.
$("#reply_list_" + feed_id).append("<div><b>{{ user.nickname }}</b> " + reply_content + "</div>")
  • 또한 댓글을 게시하면 댓글 입력창은 초기화 해주어야 한다.
$('#' + reply_id).val('');

출처

profile
개발 시작

0개의 댓글