Django

Chapter 5-4 📌 Django CBV - LoginRequiredMixin과 CreateView로 블로그 글 작성 기능 구현하기

Chansman 2025. 5. 8. 10:04

📌 Django CBV - LoginRequiredMixin과 CreateView로 블로그 글 작성 기능 구현하기


1️⃣ CBV로 글 작성 기능 추가하기

Django의 CreateView를 사용하면 새로운 객체 생성 폼을 간단히 구현할 수 있습니다.
LoginRequiredMixin을 함께 적용하면 로그인한 사용자만 글 작성이 가능하도록 제한할 수 있습니다.

# blog/cb_views.py
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpResponseRedirect
from django.urls import reverse_lazy
from django.views.generic import CreateView
from blog.models import Blog

class BlogCreateView(LoginRequiredMixin, CreateView):
    model = Blog
    template_name = 'blog_create.html'
    fields = ('title', 'content')

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.author = self.request.user
        self.object.save()
        return HttpResponseRedirect(self.get_success_url())

    def get_success_url(self):
        return reverse_lazy('cb_blog_detail', kwargs={'pk': self.object.pk})

🔐 LoginRequiredMixin이란?

  • 이 믹스인은 로그인된 사용자만 뷰에 접근할 수 있도록 제한합니다.
  • 로그인하지 않은 사용자가 접근하면 자동으로 로그인 페이지로 리디렉션됩니다.
class BlogCreateView(LoginRequiredMixin, CreateView):
    ...

🔒 실무에서 민감한 데이터 생성, 수정, 삭제 작업에는 항상 로그인 여부 확인이 필요합니다.


2️⃣ 작성 완료 후 이동 경로 설정: get_success_url()

  • 블로그 글 작성이 완료되면 get_success_url() 에서 리디렉션할 경로를 정의합니다.
def get_success_url(self):
    return reverse_lazy('cb_blog_detail', kwargs={'pk': self.object.pk})

🔁 reverse_lazy는 urls.py의 name을 기반으로 URL을 지연 로딩하여 반환합니다.


3️⃣ URL 연결하기

# config/urls.py
from blog import cb_views

urlpatterns = [
    path('cb/', cb_views.BlogListView.as_view(), name='cb_blog_list'),
    path('cb/<int:pk>/', cb_views.BlogDetailView.as_view(), name='cb_blog_detail'),
    path('cb/create/', cb_views.BlogCreateView.as_view(), name='cb_blog_create'),
]

🆕 /cb/create/ 경로에서 로그인한 사용자만 글 작성 가능


4️⃣ 템플릿 예시 (blog_create.html)

<h1>블로그 글 작성</h1>
<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">작성하기</button>
</form>

✅ 정리

  • CreateView는 글 작성 로직을 최소 코드로 처리할 수 있게 도와주는 강력한 제너릭 뷰입니다.
  • LoginRequiredMixin을 함께 사용하면 보안성을 강화할 수 있습니다.
  • form_valid()에서 작성자를 수동으로 지정하고, get_success_url()에서 상세 페이지로 리디렉션하는 방식으로 사용자 친화적 흐름을 만들 수 있습니다.

💡 사용자 인증 기반의 CRUD 구현 시 CBV + 믹스인 조합은 필수 패턴입니다!