Chapter 4-4 Django 블로그 수정 기능 구현 (작성자만 수정 가능)

2025. 5. 7. 10:32·Django

✏️ 블로그 수정 기능 구현 (작성자만 수정 가능)

1️⃣ 수정 버튼은 작성자만 보이도록 처리

블로그 상세 페이지에서 로그인된 유저가 글 작성자일 경우에만 수정 버튼이 보이도록 설정합니다.

<!-- blog_detail.html -->
{% if request.user == blog.author %}
    <div style="text-align: right">
        <a href="{% url 'blog_update' blog.pk %}">수정</a>
        {{ blog.author.username }}
    </div>
{% endif %}

📌 request.user == blog.author 조건으로 비교
📌 로그인하지 않은 유저, 작성자가 아닌 유저는 버튼이 보이지 않음


2️⃣ 수정 페이지 템플릿 생성 (blog_update.html)

{% extends 'base.html' %}
{% block content %}
    <h1>블로그 수정</h1>
    <form method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <button>수정</button>
    </form>
{% endblock %}

📌 기존 작성된 데이터를 instance=blog로 설정하여 자동으로 값이 채워짐
📌 CSRF 토큰 필수 포함


3️⃣ 수정 뷰 함수 작성 (views.py)

from django.contrib.auth.decorators import login_required
from django.shortcuts import render, get_object_or_404, redirect, reverse
from blog.models import Blog
from blog.forms import BlogForm

@login_required()
def blog_update(request, pk):
    blog = get_object_or_404(Blog, pk=pk, author=request.user)  # 작성자 본인만 접근 허용

    form = BlogForm(request.POST or None, instance=blog)  # 기존 데이터 기반 폼 생성
    if form.is_valid():
        blog = form.save()
        return redirect(reverse('blog_detail', kwargs={'pk': blog.pk}))

    context = {
        'blog': blog,
        'form': form
    }
    return render(request, 'blog_update.html', context)

📌 get_object_or_404(..., author=request.user) → 타인의 글은 수정 불가 (403)
📌 instance=blog로 기존 글 내용을 폼에 채워줌


4️⃣ URL 라우팅 설정 (urls.py)

path('<int:pk>/update/', views.blog_update, name='blog_update'),

📌 예: /1/update/ → ID가 1인 블로그 글 수정 페이지 이동


✅ 구현 요약

항목 설명

템플릿 조건문 request.user == blog.author 로 수정 버튼 제한
수정 페이지 blog_update.html 생성 및 작성된 값 출력
뷰 처리 instance=blog 로 수정용 폼 구성
접근 제한 @login_required + 작성자 필터링

💬 사용자 인증과 권한 체크를 조합하면, 보안적이고 신뢰성 높은 수정 기능을 만들 수 있습니다. 이 구조는 댓글, 게시판, 프로필 편집 등 다양한 곳에 응용 가능합니다.

'Django' 카테고리의 다른 글

Chapter 4-7 Django 블로그 삭제 기능 만들기  (0) 2025.05.07
Chapter 4-5 Django 블로그에 페이지네이션(Pagination) 기능 구현하기  (0) 2025.05.07
Chapter 4-3 Django 작성 기능 만들기 with Form  (0) 2025.05.07
Chapter 4-1 Django [블로그] 상세페이지에 작성자 정보 추가하기  (0) 2025.05.07
Chapter 3-7 Django 회원가입(SignUp) 및 로그인(Login) 페이지 만들기  (0) 2025.05.06
'Django' 카테고리의 다른 글
  • Chapter 4-7 Django 블로그 삭제 기능 만들기
  • Chapter 4-5 Django 블로그에 페이지네이션(Pagination) 기능 구현하기
  • Chapter 4-3 Django 작성 기능 만들기 with Form
  • Chapter 4-1 Django [블로그] 상세페이지에 작성자 정보 추가하기
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (799) N
      • Python (32)
      • 프로젝트 (118) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 4-4 Django 블로그 수정 기능 구현 (작성자만 수정 가능)
상단으로

티스토리툴바