CBV냐 FBV냐? 논쟁이 많은데. 편한거 사용하면 되겠쥬?
개인적으로 생각하기에는 함수로 차근차근 다져놓고 이후 매번 중복되는 코드를 리팩토링하기위해서 클래스로 넘어가는게 매우 바람직하다라고 생각되네요.
아쨋든 Django Official Document는 물론이거니와 다른 참고 할 만한 웹사이트가 있으니 확인해 보세요.
https://ccbv.co.uk/
의 DetailView
를 볼게요.
우선 클래스로 짯을때 얼마나 달라지는지 마법?을 볼게요.
rooms/views.py
코드 딸랑 두줄이네요?! ㄹㅇ 마법같네.
from django.views.generic import ListView, DetailView
from rooms import models
class RoomDetail(DetailView):
model = models.Room
rooms/urls.py
클래스이름.as_view()
적어줘야해요.
from django.urls import path
from rooms import views
app_name = 'rooms'
urlpatterns = [
path('<int:pk>', views.RoomDetail.as_view(), name='detail')
]
room_detail.html이 없다고 하니 기존 detail 페이지에 해당하는 html page이름을 서버에서 찾고있는 이름과 동일하게 변동할게요.
작명 방법은 빨간선, 노란선과 같이 클래스 이름을 소문자화해서,
앞에는 디비에서 가져오는 모델이름! 그리고 뒷 부분은 상속받은 클래스의 이름을 따서 지은것 같은 스멜이 나네요.
그런데 pk인자는 어떻게 알고 urls.py에서 정한걸 DetailView에서 --> room_detail.html로 넘어가서 정상적으로 출력될까요?
이에 대해 알려면 아래 사진에서 빨간부분을 보면 알수 있어요.
FBV는 404 오류를 잡기위해 try...except... raise, Http404, redirect, reverse같은 여러가지 소스코드를 작성했지만
CBV는 단 2줄로 퉁쳐버렸다!
class RoomDetail(DetailView):
model = models.Room