django에서는 다루는 데이터를 기준으로 앱을 분리하여 관리한다.
게시물 테이블과 댓글 테이블로 분리되므로 각각 분리된 앱으로 관리할 수도 있지만
이번 프로젝트에서는 이 두 데이터를 같은 앱에서 관리해볼 것이다.
게시물을 관리하는 Posting
앱에 댓글을 관리하는 테이블을 만들기 위해 아래와 같이 모델을 생성한다.
Comment
클래스를 만들고
댓글을 작성한 user
,
댓글이 작성되는 게시물 post
,
댓글 작성 시간 created_at
,
댓글 내용 content
를 만든다.
Foreign Key
를 이용하여 해당 댓글의 유저와 이미 가입된 사람(계정)을 연결시켜주고, 댓글이 달리는 게시물을 등록되어 있는 게시물과 연결시켜 주었다.
if Account.objects.filter(email = data['email']).exists():
# 요청받은 이메일이 존재하는지 확인
user = Account.objects.get(email = data['email'])
# 존재한다면 user에 해당 사용자 정보 할당
if Post.objects.filter(id = data['post_number']).exists():
# 요청받은 게시물 번호에 맞는 게시물이 존재하는지 확인
post = Post.objects.get(id = data['post_number'])
# 존재한다면 post에 해당 게시물 정보 할당
# 요청받은 정보들로 데이터 생성
Comment(
user = user,
post = post,
content = data['content'],
).save()
# 에러메시지와 코드 반환
return JsonResponse({'MESSAGE': 'SUCCESS'}, status=200)
return JsonResponse({'MESSAGE': 'INVALID_POST'}, status=401)
return JsonResponse({'MESSAGE': 'INVALID_USER'}, status=401)
특정 게시물을 기준으로 분류되도록 클래스를 생성해본다.
def get(self, request): # get 메소드 사용
data = json.loads(request.body) # 요청의 body
post_id = data['post_number'] # 요청받은 게시물 번호에 해당하는 게시물
comment_list = list(Comment.objects.filter(post_id = post_id).values())
# 해당 게시물에 달린 모든 댓글 정보
return JsonResponse({'comment_list': comment_list}, status=200)
# 댓글 리스트 및 코드 반환
2번 게시물에 등록된 댓글 정보를 불러오면 위와 같은 댓글 리스트를 확인 할 수 있다.