Chapter 4-7 Django 블로그 삭제 기능 만들기

2025. 5. 7. 10:37·Django

🗑️ 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
'Django' 카테고리의 다른 글
  • Chapter 5-1 📌 Django Class-Based Views (CBV) 완전 정복 가이드
  • Chapter 4-6 Django 블로그 검색 기능 구현하기
  • Chapter 4-5 Django 블로그에 페이지네이션(Pagination) 기능 구현하기
  • Chapter 4-4 Django 블로그 수정 기능 구현 (작성자만 수정 가능)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (794) N
      • Python (32)
      • 프로젝트 (113) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (154) N
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    urbantrends
    basalcellcarcinoma
    btscomeback
    hotcoffeecase
    trumpmuskclash
    btsdischarge
    youngprofessionals
    chinanightlife
    global politics
    뷔
    smartphonedurability
    self-growth
    bts
    btsjungkook
    classaction
    btsreunion
    RM
    lawsuitculture
    college reunions
    gpterror
    homebartrend
    newpoliticalparty
    americaparty
    travel ban
    chatgpterror
    titaniumcase
    remittance
    life reflection
    livebroadcast
    americanlaw
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 4-7 Django 블로그 삭제 기능 만들기
상단으로

티스토리툴바