Backend/Django + Bootstrap 개발 일지

21. 수정 기능 구현

Fullstacknology 2022. 8. 17. 22:39

 포스트 수정 페이지 구현

 

테스트 코드로 기본 요건 정의

 

테스트 코드 작성

    요구하는 바람직한 상태를 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문으로 로그인이 되어있고 포스트 작성자라면 버튼이 보이도록 하고 그 이외에는 보이지 않도록 한다.