∟Framework/∟Django

Django - MTV 패턴을 활용한 RUD(Read, Update, Delete) 구현

최 수빈 2025. 1. 22. 19:11

 

Django MTV 패턴으로 게시글 RUD 구현하기

 

 

RUD

Read : 상세 페이지 조회

Update : 글 수정 (수정 및 저장 처리 분리)

Delete : 글 삭제 (POST 방식만 허용)

 

편의성 개선

상세 페이지 링크 추가

목록 및 작성 페이지 간 이동 링크 추가

 


글 작성 후 목록 페이지로 리다이렉트


글 작성 후 URL 이동이 이루어지지 않으면 브라우저에서 POST 요청이 반복될 가능성이 있음

이를 방지하기 위해 redirect를 사용하여 'articles' 목록 페이지로 이동하도록 수정

 

 

실제로 render처리만 해서 띄운 create 페이지에서 command+r 을 연타한 결과

반복된 POST요청의 결과

중복된 데이터가 여러개 생성된 것을 볼 수 있다.

 

 

articles/view.py

 

*PRG(Post-Redirect-Get) 패턴

POST 요청 후 다른 URL로 리다이렉트하여 중복 요청을 방지하고 사용자 경험을 개선하는 방법

  - POST 요청 반복 방지
  - 브라우저 새로고침 시 동일 요청 재전송 방지

 

 

앱(articles)내 templates/ 상세페이지(article_detail.html) 생성

articles/templates/article_detail.html

 

 

상세페이지

 

-제목 

-내용

-작성시간

-수정시간

 

▷목록으로 돌아가기

▷수정(edit.html)

▷삭제(delete.html)

 

이번에 새로 만든 기능

 

views.article_detail의 urlpatterns path "<int:pk>"

articles/urls.py

  • <int:pk> : URL에서 정수 값을 받아 뷰 함수나 클래스 기반 뷰로 전달

article_detail로 처리된 뷰

 

 

 

Anchor 태그 내부로 pk와 title을 넣어 상세 페이지로 이동할 수 있는 클릭 가능 영역 확장

articles/templates/articles.html

 

article리스트들에서도 상세페이지로 넘어갈 수 있도록 설계하고 보니까 anchor태그안에 제목만 넣어놓음

제목 글자크기를 늘릴까 고민하다가 걍 시각적으로 hr로도 나눠놨는데.. 저 어딘가 아무데나 누르면 넘어가게 해보자! 해서 저렇게 넣었다. 

 

아, 그리구 새 글을 작성하는 페이지로 넘어가는 앵커태그도 넣어줌

 

/articles/

아무데나 눌러도 넘어가는 페이지.

 

'새 글 작성'을 눌러서 타고 넘어온 articles/new/

 

여기두 취소버튼 만들어서 다시 목록으로 돌아가게 만듦

articles/templates/new.html

 

상세 페이지의 삭제, 수정기능

 

 

앱(articles)내의 views.py

 

 

delete정의

articles/views.py

 

GET 요청으로는 삭제가 이루어지지 않도록 'request.method == "POST"'

Django DRM의 delete()메서드로 삭제 작업 수행

삭제 후 articles페이지로 리디렉션

 

GET요청이라면 redirect "article_detail", pk=pk

 

 

edit 정의

articles/views.py

1. 글 수정 url

  • 수정할 글을 보여주는 url (articles/<pk>/edit/)
  • 글 수정을 처리할 url (articles/<pk>/update/)

2. 글 수정 로직 수행 view

  • 수정할 글을 보여주는 view (edit view)
  • 글 수정을 처리하는 view (update view)

3. 글 수정 수행 template (edit.html)

4. 글 수정 버튼 -> article_detail

 

edit.html

articles/templates/edit.html
/articles/<int:pk>/edit/

'∟Framework > ∟Django' 카테고리의 다른 글

Django - MTV패턴을 활용한 C(Create)와 R(Read) 구현  (0) 2025.01.18
Django - ORM(Object-Relational Mapping)  (1) 2025.01.14
Django - Model  (1) 2025.01.14
Django - URLs  (0) 2025.01.14
Django - HTTP Form  (0) 2025.01.12