🗑️ Mini Project: 블로그 삭제 기능 만들기
사용자가 자신이 작성한 글을 삭제할 수 있는 기능을 구현합니다.
삭제는 POST 요청으로만 처리되며, 인증된 사용자만 삭제할 수 있습니다.
1️⃣ 삭제 뷰 구현 (views.py)
from django.views.decorators.http import require_http_methods
from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404, redirect, reverse
from blog.models import Blog
@login_required()
@require_http_methods(['POST']) # POST 요청만 허용
def blog_delete(request, pk):
blog = get_object_or_404(Blog, pk=pk, author=request.user) # 본인 글만 삭제 가능
blog.delete()
return redirect(reverse('blog_list'))
📌 @require_http_methods(['POST']): GET 방식 삭제 차단
📌 @login_required(): 로그인 상태 확인
📌 get_object_or_404(..., author=request.user): 본인 글인지 확인 후 삭제
2️⃣ 상세 페이지에서 삭제 버튼 추가 (blog_detail.html)
{% extends 'base.html' %}
{% block content %}
<h1>{{ blog.title }}</h1>
{% if request.user == blog.author %}
<div style="text-align: right">
<a href="{% url 'blog_update' blog.pk %}">수정</a>
<form action="{% url 'blog_delete' blog.pk %}" method="POST" style="display: inline">
{% csrf_token %}
<button>삭제</button>
</form>
</div>
{% endif %}
<div style="text-align: right">
{{ blog.author.username }}
</div>
<hr>
<p>{{ blog.content }}</p>
<a href="{% url 'blog_list' %}">목록으로 돌아가기</a>
{% endblock %}
📌 삭제 버튼은 작성자에게만 보임 (request.user == blog.author)
📌 삭제는 form + POST 방식 + csrf_token 조합으로 보안 강화
3️⃣ URL 연결 (urls.py)
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.blog_list, name="blog_list"),
path('<int:pk>/', views.blog_detail, name="blog_detail"),
path('create/', views.blog_create, name='blog_create'),
path('<int:pk>/update/', views.blog_update, name='blog_update'),
path('<int:pk>/delete/', views.blog_delete, name='blog_delete'), # ✅ 삭제 URL 등록
# auth
path('accounts/', include("django.contrib.auth.urls")),
path('signup/', member_views.sign_up, name='signup'),
path('login/', member_views.login, name='login'),
]
📌 삭제 URL은 <int:pk>/delete/ 형식으로 접근
✅ 요약 체크리스트
항목 설명
삭제 조건 | ✅ 본인 글만 삭제 가능 (author=request.user) |
요청 방식 | ✅ POST 요청만 허용 (@require_http_methods) |
보안 처리 | ✅ 로그인 확인, CSRF 토큰 포함 |
UI 표시 | ✅ 작성자에게만 삭제 버튼 노출 |
💬 삭제는 민감한 작업이므로 POST 방식으로 처리하고, 사용자 인증을 철저히 확인해야 합니다. Django 데코레이터를 활용하면 안정적으로 구현할 수 있어요!
'Django' 카테고리의 다른 글
Chapter 5-1 📌 Django Class-Based Views (CBV) 완전 정복 가이드 (0) | 2025.05.08 |
---|---|
Chapter 4-6 Django 블로그 검색 기능 구현하기 (0) | 2025.05.07 |
Chapter 4-5 Django 블로그에 페이지네이션(Pagination) 기능 구현하기 (0) | 2025.05.07 |
Chapter 4-4 Django 블로그 수정 기능 구현 (작성자만 수정 가능) (0) | 2025.05.07 |
Chapter 4-3 Django 작성 기능 만들기 with Form (0) | 2025.05.07 |