Django
Chapter 5-6 📌 Django CBV로 블로그 글 삭제 기능 구현하기
Chansman
2025. 5. 8. 10:06
📌 Django CBV로 블로그 글 삭제 기능 구현하기
✅ 1. DeleteView란?
DeleteView는 Django의 제너릭 CBV 중 하나로, 객체를 삭제할 때 사용합니다.
- 삭제 전 확인 페이지를 보여주거나,
- 바로 삭제 처리 후 리디렉션하는 방식으로 사용할 수 있습니다.
✅ 2. DeleteView 클래스 구현
# blog/cb_views.py
from django.views.generic import DeleteView
from django.urls import reverse_lazy
from django.contrib.auth.mixins import LoginRequiredMixin
from blog.models import Blog
class BlogDeleteView(LoginRequiredMixin, DeleteView):
model = Blog
# 🔹 본인의 글만 삭제 가능하도록 필터링
def get_queryset(self):
return super().get_queryset().filter(author=self.request.user)
# 🔹 삭제 후 목록 페이지로 이동
def get_success_url(self):
return reverse_lazy('blog_list')
🔄 코드 흐름 설명:
- LoginRequiredMixin → 로그인된 사용자만 삭제 가능
- get_queryset() → 현재 로그인한 사용자의 글만 삭제 대상으로 허용
- get_success_url() → 삭제 후 리디렉션할 URL 설정
✅ 3. URL 연결
# config/urls.py
from blog import cb_views
urlpatterns = [
path('cb/<int:pk>/delete/', cb_views.BlogDeleteView.as_view(), name='blog_delete'),
]
➡️ /cb/5/delete/ 같은 주소로 접근 시 ID가 5인 글 삭제 처리
✅ 4. 템플릿에서 삭제 버튼 추가
{# blog_detail.html #}
{% if request.user == blog.author %}
<div style="text-align: right">
<a href="{% url 'cb_blog_update' blog.pk %}">수정</a>
<form id="delete_form" action="{% url 'blog_delete' blog.pk %}" method="POST" style="display: inline">
{% csrf_token %}
<button type="button" id="delete_btn">삭제</button>
</form>
</div>
{% endif %}
➡️ 현재 로그인한 사용자가 작성자일 때만 삭제 버튼이 표시됩니다.
{% block js %}{% endblock %} #base.html 에 추가
➡️ base.html 에 하위블록 block js 생성
✅ 5. 삭제 전 확인 팝업 구현
{% block js %}
<script>
document.querySelector('#delete_btn').addEventListener('click', function() {
if(confirm('삭제하시겠습니까?')) {
document.querySelector('#delete_form').submit();
}
});
</script>
{% endblock %}
➡️ 실수 방지를 위해 confirm() 팝업으로 확인 요청 후 삭제 수행
✅ 6. 정리 및 실무 팁
기능 설명
UpdateView | 로그인한 사용자만 본인 글 수정 가능 |
DeleteView | 본인 글만 삭제 가능, 삭제 후 목록 이동 |
get_absolute_url() | 삭제 후 이동 URL을 모델에서 지정 가능 (선택) |
confirm() 팝업 | 실수 방지 UX 제공 |
💡 마무리 팁
- CBV를 사용하면 CRUD 구조를 짧고 일관성 있게 관리할 수 있습니다.
- LoginRequiredMixin + get_queryset() 조합은 보안 필터링의 핵심입니다.
- 삭제는 POST 방식만 허용되므로 form method="POST" + csrf_token은 필수입니다.
실무에서는 삭제 시 별도의 확인 페이지를 두거나, 소프트 삭제(삭제 표시만 하고 실제 데이터는 보존)를 적용하기도 합니다.