11.클래스 기반 뷰

최대 1 분 소요

클래스 기반 뷰 (CBV)

함수 기반 뷰 (FBV)

  • View 구현의 기본 -> FBV로 구현할 줄 알아야 응용이 가능
  • 공통 기능들을 장식자(decorator)문법으로 적용

# app/urls.py

urlpatterns = [
    path('', views.post_list, name='post_list'),
    path('<int:pk>/', views.post_detail), # 여기 pk를 전달 받아 views에서 사용
]

# app/views.py

def post_detail(request: HttpRequest, pk: int) -> HttpResponse:
    post = get_object_or_404.get(Post, pk=pk) # doesnotexist 예외
    
    # 위와 같은 코드
    # try:
    #     post = Post.objects.get(pk=pk) # deosnotexist 예외
    # except Post.DoesNotExist:
    #     raise Http404

    return render(request, 'instagram/post_detail.html', {
        'post': post,
    })

# 위와 같은 코드 (이미 django에 구현 되어 있음)
post_detail = DetailView.as_view(model=Post)

클래스 기반 뷰 (CBV)

  • View 함수를 만들어주는 클래스
    • as_view() 클래스 함수를 통해, View 함수를 생성
    • 상속을 통해, 여러 기능들을 믹스인
  • 짧은 코드로 많은 기능 구현 가능
  • 공통 기능들을 상속(inheritance)문법으로 적용

Built-in CBV API

Base view를 통해 기본적인 클래스 기반 뷰를 지원하며, DRF에서도 CBV 컨셉이 적용되어 있어 CBV를 이해하는게 좋음

  • Base views
  • Generic display views
  • Generic date views
  • Generic editing views

Base views

django/views/generic/base.py

  • View
  • TemplateView
    • TemplateResponseMixin
    • ContextMixin
    • View
  • RedirectView
    • View

댓글남기기