기술블로그-Django편

📌 Django DeleteView의 확인 화면 제거 vs JS confirm() 비교 가이드

Chansman 2025. 5. 8. 21:46

📌 Django DeleteView의 확인 화면 제거 vs JS confirm() 비교 가이드

DeleteView를 사용할 때, Django 기본 확인 화면을 유지할지, JavaScript의 confirm() 팝업을 사용할지 고민되셨나요? 아래에 각 방식의 차이점과 구현법, 주의사항까지 깔끔히 정리해드렸습니다 ✅


🔍 현재 문제 상황

  • DeleteView를 사용 중인데 삭제 확인 화면(todo_confirm_delete.html) 이 자동으로 나오지 않음
  • 대신 JavaScript confirm() 팝업만 나타남

⚙️ Django DeleteView 기본 동작 방식

class TodoDeleteView(DeleteView):
    model = Todo
  • 위와 같이 정의하면 Django는 기본적으로 todo/todo_confirm_delete.html 템플릿을 자동으로 찾아 보여줍니다
  • 즉, GET 요청 시 삭제 전 확인 화면을 렌더링합니다

⚡ JavaScript confirm()을 활용한 방식

아래처럼 get() 메서드를 post()로 우회하면 확인 화면 없이 바로 삭제 처리가 진행됩니다:

class TodoDeleteView(DeleteView):
    model = Todo

    def get(self, *args, **kwargs):
        return self.post(*args, **kwargs)

🧠 해석:

  • GET 요청도 POST처럼 처리되므로
  • todo_confirm_delete.html을 렌더링하지 않고 삭제를 바로 실행

✅ HTML + JS confirm() UI 구조 예시

📄 HTML

<form id="delete_form" method="post" action="{% url 'cbv_todo_delete' todo.id %}" style="display: inline;">
  {% csrf_token %}
  <button type="button" id="delete_btn">삭제하기</button>
</form>

⚙️ JavaScript

<script>
document.addEventListener('DOMContentLoaded', function () {
  const btn = document.querySelector('#delete_btn');
  const form = document.querySelector('#delete_form');

  if (btn && form) {
    btn.addEventListener('click', function () {
      if (confirm('정말 삭제하시겠습니까?')) {
        form.submit();
      }
    });
  }
});
</script>

🧾 비교표로 한눈에 보기

항목 Django 기본 DeleteView JS confirm() 방식

확인 화면 제공 todo_confirm_delete.html 자동 렌더 JS 팝업으로 대체
GET 요청 확인 화면으로 응답 바로 삭제 처리 (주의)
템플릿 필요 O (todo_confirm_delete.html) X
사용자 UX 2단계 확인 1-Click 삭제 (빠름)
구현 난이도 Django 설정 필요 JS 코드만 추가하면 됨

⚠️ 주의사항: get() 오버라이드 여부 확인!

class TodoDeleteView(DeleteView):
    model = Todo

    def get(self, *args, **kwargs):
        return self.post(*args, **kwargs)
  • 위 코드처럼 get()을 오버라이드하고 있으면, Django는 절대 todo_confirm_delete.html을 렌더링하지 않습니다!
  • 다시 확인 화면을 사용하고 싶다면 get() 메서드를 삭제해야 합니다

✅ 마무리 정리

구분 설명

Django 기본 방식 GET 요청 시 자동으로 확인 화면을 렌더링함
JS confirm 방식 확인 화면 생략 + JS로 팝업 처리
주의할 점 get()을 오버라이드하면 화면 렌더링이 되지 않음

💡 추가 가이드 필요 시:

  • todo_confirm_delete.html 템플릿 복구법
  • CBV vs FBV 기반 삭제 흐름 비교
  • JS confirm 대신 모달 창으로 UI 개선하기

언제든지 요청해주세요 🙂