● 포스트 수정 페이지 구현
테스트 코드로 기본 요건 정의
테스트 코드 작성
요구하는 바람직한 상태를 test_update_post() 함수로 작성한다.
urls.py 와 views.py 수정
/blog/update_post/post pk로 접근한다면 views.py의 PostUpdate 클래스를 사용하도록 한다.
포스트 작성자만 수정할 수 있게 구현
dispatch()로 요청 방식 판단
dispatch() 메서드는 클라이언트에서 GET 혹은 POST 방식으로 요청했는지 판단하는 기능을 한다. CreateView, UpdateView의 경우 해당 경로에 GET 방식으로 들어오면 포스트를 작성하는 폼 페이지로 보내준다. POST로 들어오는경우 유효한지 확인후 DB에 내용을 저장한다.
dispatch()가 실행중에는 권한없는 사용자의 PostUpdate 사용을 차단하기 위해 raise PermissionDenied를 이용한다.
템플릿 지정
템플릿을 따로 지정하지 않았기 때문에 정상적으로 나왔어야 할 Edit Post - Blog가 나오지 않고 기존에 있던 Create Post -blog가 나온다. 제대로 원하는 title이 나오도록 수정해 준다.
PostUpdate는 UpdateView를 상속받아 확장한 클래스로 CreateView, UpdateView는 모델명 뒤 _form.html이 붙은 템플릿 파일을 기본으로 사용한다. 그렇기 때문에 이전에 작성한 post_form.html을 자동으로 찾아서 사용한다.
따로 post_update_form.html을 만들기 위해 기존에 있던 post_form.html을 복붙한 후 제목 부분만 조금 손 봐준다. 후 테스트를 통과했는지 확인한다.
포스트 상세 페이지에 수정 버튼 추가
포스트 작성자 에게만 Edit Post 버튼이 보이도록 수정해 본다.
<Edit Post> 만들기
if문으로 로그인이 되어있고 포스트 작성자라면 버튼이 보이도록 하고 그 이외에는 보이지 않도록 한다.
'Backend > Django + Bootstrap 개발 일지' 카테고리의 다른 글
23. 외부 라이브러리를 블로그에 활용 (폼 모양 꾸미기, 마크다운 적용) (0) | 2022.08.25 |
---|---|
22. 태그 선택란 추가 (1) | 2022.08.22 |
20. 폼으로 포스트 작성 (0) | 2022.08.11 |
19. 다대다 관계 구현(19 ~ 22) (Tag 모델, 포스트 목록과 상세 페이지에 태그 기능 추가, 태그 페이지 구현 ) (0) | 2022.08.08 |
18. 다대일 관계 구현 (카테고리 기능 2) (0) | 2022.08.07 |