11.클래스 기반 뷰
클래스 기반 뷰 (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
댓글남기기