1. 수정 일시

 이번에는 게시글을 수정하고 삭제하는 기능을 추가할 것이다. 먼저 게시글과 답글에 수정 일시 정보를 넣기 위한

modify_date 속성을 추가해보자.

 

 pybo/models.py 를 위와 같이 수정하여 게시글과 답글 모델에 modify_date 속성을 추가해준다.  modify_date 는

수정사항이 발생했을 때만 생성되는 데이터이기 때문에 어떤 조건으로든 값을 비워둘 수 있음을 명시하기 위해

null=True, blank=True 로 설정한다.

 

물론 모델이 변경됐기 때문에 makemigrations 와 migrate 도 잊지말고 실행해줘야 한다.  author 속성을 추가했을 때와

달리 비워둘 수 있는 속성이기 때문에 별다른 문제없이 수행된다.

 

 

2. 질문 수정

 이제 게시글 수정 기능을 구현해보자.

 

먼저 templates/pybo/question_detail.html 을 위와 같이 수정하여 로그인한 유저가 이 게시글의 작성자일 때에 한해서

게시글 수정 버튼이 나타나도록 한다.

 

pybo/urls.py 에 위와 같이 pybo:question_modify 에 해당하는 url 매핑을 추가한다.

 

pybo/views.py 에 question_modify 함수를 추가한다.  비정상적인 접근을 대비해서 게시글 작성유저 본인이 맞는지

한번더 확인하여 본인이 아니라면 오류메시지를 띄우고 게시글 상세 페이지로 이동하고 작성자 본인이 맞다면

question 인스턴스와 함께 게시글 작성 페이지로 이동하도록 한다.

 

오류 메시지를 표시하기 위해 quesiton_detail.html 을 위와 같이 조금 더 수정한다. 

 

이제 유저 본인이라면 수정 버튼이 생기고 수정 버튼을 누르면 게시글 수정 페이지가 잘 보이는 것을 확인할 수 있다.

 

또한 url을 통해 비정상적으로 수정 페이지에 접근할 경우 수정 권한이 없다는 오류메시지를 띄우는 것도 확인 가능하다.

 

 

3. 질문 삭제

 다음은 질문을 삭제하는 기능을 구현할 차례이다. 

 

방금 전 수정 버튼을 추가한 자리 아래에 위와 같이 삭제 버튼도 만들어준다. 삭제버튼의 경우 정말로 삭제할 것인지

확인을 해야하기 때문에 href 를 #으로 하고 data-uri에 삭제 페이지 url을 저장, 클래스에 delete 속성을 넣어준다.

 

삭제 확인 메시지창이 뜨도록 하기 위해서는 자바 스크립트 코드가 필요하다. 그리고 자바 스크립트 코드를 실행하려면

jQuery 라이브러리를 로드할 필요가 있다.  우리는 이전에 부트스트랩의 적용을 위해 이미 jQuery 라이브러리를

base.html에 포함시켜 두었다.  base.html을 위와같이 조금 수정하여 자바스크립트의 호출이 반드시 jQuery 로드 이후에

오도록 하자.

 

그리고 question_detail.html 에서 body 블록 아래에 script 블록을 추가하여 삭제를 확인하는 메시지가 뜨도록 한다.

 

pybo/urls.py 에 data-uri 에 넣어준 question:delete 에 해당하는 url 매핑을 추가해준다.

 

pybo/views.py 에 question_delete 함수도 구현해준다.  수정과 마찬가지로 유저 본인확인을 한번 더 진행한 뒤

삭제가 이뤄지도록 하였다.

 

유저 본인의 게시물일 경우 삭제 버튼이 나타나고 클릭 시 확인 메시지가 나타난다.

 

삭제를 확인할 경우 게시글이 정상적으로 삭제된 것을 볼 수 있다.

 

 

4. 답변 수정

 이제 답글에도 수정, 삭제기능을 구현해야한다.  기본적인 흐름은 게시글과 같으나 답변 작성 화면은 원래 게시글

상세 페이지에 딸려있는 형태이기에 수정을 위한 템플릿을 별도로 만들어야한다.

 

question_detail.html 을 수정하여 게시글 상세 페이지의 답글에 수정 버튼을 추가한다.

 

pybo/urls.py 에 answer:modify 에 해당하는 url 매핑을 추가한다.

 

pybo/views.py 에 answer_modify 함수를 추가한다.

 

위와 같이 question_form.html 을 참조하여 answer_form.html 을 작성한다. 

 

이제 정상적으로 답글 수정이 가능한 것을 확인할 수 있다.

 

 

5. 답변 삭제

 답글 삭제도 게시글의 삭제와 마찬가지로 이루어진다.

 

먼저 question_detail.html 에서 답글의 수정버튼 옆에 삭제 버튼을 추가해준다.  게시글 삭제와 마찬가지로 href 를

#으로 하고 url은 data-uri 에 넣어준다.  또한 삭제버튼이 눌린것을 감지하기 위해 class에 delete 속성도 추가한다.

 

pybo/urls.py 에 answer:delete 에 해당하는 url 매핑을 추가한다.

 

pybo/views.py 에 answer_delete 함수를 위와같이 구현한다.  삭제되면 index로 나가야했던 게시글과 달리

답글은 삭제할 경우 answer.question.id 에 해당하는 question_detail 페이지로 이동하도록 한다.

 

삭제 확인을 위한 자바스크립트 코드는 이미 삽입되어있기 때문에 추가적인 작업이 필요하지 않다.

 

답글 삭제 기능이 정상적으로 동작하는 것을 확인할 수 있다.

 

 

6. 수정 일시 표시

 마지막으로 게시글과 답글에 수정이 발생한 경우 수정 일시를 표시하는 기능을 추가하자.

 

question_detail.html을 위와 같이 수정하여 게시글과 답글의 작성일시 옆에 수정 일시를 표시하도록 한다.

 

수정된 게시글과 답글에 정상적으로 수정일시가 표시되는 것을 확인할 수 있다.

'개인 프로젝트 > Django-mysite' 카테고리의 다른 글

#24 View 파일 분리하기  (0) 2021.10.10
#23 댓글  (0) 2021.10.07
#21 글쓴이 표시  (0) 2021.10.04
#20 모델 변경  (0) 2021.10.04
#19 계정 생성  (0) 2021.10.01

+ Recent posts