본문 바로가기
개발/Django

[Django] 게시판 댓글 기능 구현 해보기 - Part 1

by char_lie 2023. 4. 10.
반응형

django를 활용하여 게시판 댓글 기능을 구현해 보자.

기본 코드는 아래 링크 페이지에서 이어진다. 

https://edder773.tistory.com/108

 

[Django] 권한과 인증 기능 사용해보기 - Part 6 (비밀번호 변경 기능 만들기)

django를 활용해서 비밀번호 변경 기능을 구현해 보자. 기본적인 코드 형태는 아래 Part 5를 따라가니 참고하자 https://edder773.tistory.com/107 [Django] 권한과 인증 기능 사용해보기 - Part 5 (회원 정보 수정

edder773.tistory.com

사용자에게 댓글을 입력받아 데이터베이스에 등록하도록 설정해 보자.


외래키 (Foreign Key)

  • 외래 키(FK)는 참조하는 테이블에서 1개의 키에 해당하고, 참조하는 측의 변수 관계는 참조되는 측의 테이블의 키를 의미
  • 참조하는 테이블의 행 1개의 값은 참조되는 측 테이블의 행 값에 대응
  • 하나의 테이블에는 여러 개의 외래 키를 포함할 수 있음
  • 참조하는 테이블 행 여러 개가, 참조되는 테이블의 동일 행 참조 가능
  • 키를 사용하여 부모 테이블의 유일한 값을 참조(참조 무결성)

게시판 모델 관계

  • 게시판에서 articcle은 1, comment는 N의 관계를 가지므로 N:1의 관계를 설정 
  • 모델 관계를 구성해 주기 위해서 django의 Foreignkey를 사용하여 참조
  • Foreignkey를 사용하기 위해서 필수적으로 참조하는 모델 클래스와 on_delete 옵션이 필수적

실습

이어서 댓글 기능을 구현하기 위한 comment 클래스를 만들어주자.

댓글 기능에 사용할 article과 content를 각각 정의해 주었다.

models.py에 모델에 대한 수정 사항이 생겼으니 꼭 migration을 해주자!

python manage.py makemigrations
python manage.py migrate

이후 생성된 모델을 데이터베이스 파일에서 확인해 보면, 외래키에 의해 이름이 article_id로 생성된다.

만약 외래키의 인스턴스를 article이 아닌 다른 곳에 생성했다면, 다른 곳에 name_id 형태로 만들어지니 주의해야 한다.

이제 이전에 했던 과정(CRUD)과 비슷한 형태로 진행해 보자.

사용자로부터 댓글을 입력받을 형태가 필요하니 forms.py에서 데이터 입력받기 위한 comment 폼을 만들어보자.

나는 댓글 내용만 일단 확인하고 싶으니, 필드로 Content만을 주었다.

댓글을 작성할 위치는 상세페이지 안에서 작성을 진행하므로 views.py의 read함수에 CommentForm을 출력할 수 있게 구성해 주자.

이제 상세 페이지에서 commentForm을 출력할 수 있도록, read 페이지를 수정해 주자.

이제 여기까지 작성했으면, 댓글 작성란이 잘 작성했는지 서버를 동작해서 확인해 보자.

정상적으로 댓글 페이지가 생성된 것을 확인할 수 있다.

하지만 지금의 댓글 창은 생성됐지만, 아무런 기능이 없는 표시일 뿐이다(URL 등 지정해 준 게 없으니)

그럼 이제 정삭적으로 데이터베이스에 등록 및 출력이 되도록 구현을 해보자.

read 페이지의 url을 생각하면 <int:pk> 형태로 pk 값이 상용되고 있는데, 외래 키 데이터에 필요한 정보가 이 pk 값이 필요하다.

그럼 댓글 기능도 variable routing 기능을 활용해서 구현해 보자.

먼저 댓글 생성을 위한 URL Path를 만들어주자.

이제 comment_crate 함수를 view.py에서 정의해 주자.

save() 메서드 사용 간에 데이터베이스에 저장하기 전에 객체에 대한 추가적인 작업을 진행할 수 있도록 인스턴스 만을 반환해 주도록 save(commit=False)를 설정해 준다.

함수 작성이 끝났으면, read.html에서 설정하지 않은 url을 설정해 주자.

이제 서버를 작동해서, 댓글에 내용을 넣어보자.

그러면 이제 이 댓글 등록한 내용이 데이터베이스에 정상 올라가는지 확인해 보자.

 

정상적으로 작동하는 것을 확인할 수 있다.

데이터 베이스 내용을 상세페이지에서 출력하도록 하는 건 다음 포스팅에서 다루겠습니다

반응형

댓글