[Django] FBV vs CBV

김유상·2022년 12월 22일
0

FBV(Function based view)는 말 그대로 함수에 기반을 둔 페이지를 뜻한다. 이 방식은 함수를 직접 만들어서 원하는 기능을 직접 구현할 수 있는 장점이 있다. CBV(Class based view)는 장고가 제공하는 클래스를 활용해 구현하는 방법이다. 장고는 웹 개발을 할 때 반복적으로 많이 구현하는 것들을 클래스로 미리 만들어서 제공하고 있어서 편하게 만들 수 있다.

from django.views.generic import ListView, DetailView
from .models import Post
# FBV방식
def index(request):
    posts = Post.objects.all().order_by('-pk')

    return render(
        request,
        'blog/index.html',
        {
            'posts': posts
        }
    )

def single_post_page(request, pk):
    post = Post.objects.get(pk=pk)

    return render(
        request,
        'blog/single_post_page.html',
        {
            'post' : post
        }
    )
    
# CBV방식
class PostList(ListView):
    model = Post
    ordering = '-pk'

class PostDetail(DetailView):
    model = Post
from django.urls import path
from . import views

urlpatterns = [
    # FBV방식
    path('<int:pk>/', views.single_post_page),
    path('', views.index)

    # CBV방식
    path('', views.PostList.as_view()),
    path('<int:pk>/', views.PostDetail.as_view()),
]

FBV방식은 views에서 정의한 함수를 이용해 html과 query 레코드를 전달하는 것을 알 수 있고
CBV방식은 views에 정의한 View 클래스를 이용해 전달하는 것을 알 수 있다.

그리고 CBV방식으로 클래스를 작성하면 template_name 생성 규칙에 의해
PostList 클래스는 post_list.html에 대응되고 PostDetail 클래스는 post_detail.html에 대응된다.

이렇게 사용하지 않을 경우 클래스 멤버 변수인 template_name을 따로 지정해줘야 한다.

profile
continuous programming

0개의 댓글