Django 프론트& 백엔드 개발

Django 게시글 삭제(Delete) 기능 구현

Data Jun 2026. 1. 11. 22:37

Django에서 데이터를 삭제할 때는
GET 요청으로 바로 삭제하지 않고,
반드시 확인 페이지 + POST 요청을 거치는 것이 권장됩니다

 

이번 글에서는 게시글 삭제 기능을
삭제 확인 페이지와 함께 구현하는 방식을 정리해보겠습니다.

 

1. 삭제 뷰(Delete View) 구조

from django.shortcuts import render, redirect
from .models import Post
from .forms import PostForm

def post_delete(request, post_id):
    post = Post.objects.get(id=post_id)
    if request.method == "POST":
        post.delete()
        return redirect('post-list')
    else:
        return render(request, 'posts/post_confirm_delete.html', {'post': post})
  • GET 요청: 삭제 확인 페이지 렌더링
  • POST 요청: 실제 삭제 수행 및 목록 페이지로 리다이렉트

사용자의 실수로 인한 삭제를 방지할 수 있음

 

2. 삭제 확인 템플릿 구성

{% extends './base.html' %}
{% load static %}

{% block css %}
    <link rel="stylesheet" href="{% static 'posts/css/post_confirm_delete.css' %}">
{% endblock css %}

{% block content %}
<div class="confirm">
    <p class="title">[{{post.title}}]</p>
    <p>삭제하시겠습니까?</p>
    <form method="POST">{% csrf_token %}
        <div class="confirm_btn">
            <input type="submit" value="삭제하기">
        </div>
    </form>
</div>
{% endblock content %}
  • 삭제 대상 제목 표시
  • “정말 삭제하시겠습니까?” 안내
  • CSRF 토큰 포함
  • POST 요청으로만 삭제 가능
<p class="title">[{{ post.title }}]</p>
<p>삭제하시겠습니까?</p>
 

3. 왜 GET이 아니라 POST로 삭제할까?

이유 설명
보안  URL 접근만으로 삭제 방지
명확한 의도 사용자가 명시적으로 삭제 클릭
REST 원칙 데이터 변경은 POST/DELETE

삭제는 항상 사용자의 명확한 액션이 필요

 

4. 정리하면

Django 삭제 기능은 GET + POST 분기 구조가 가장 안전

확인 페이지는 UX와 보안을 동시에 만족

실무에서도 가장 많이 사용하는 패턴

삭제는 단순한 기능이 아니라, 신중하게 다뤄야 할 사용자 액션이다.