[코드잇] Django 감정 일기 #5

hyeo71·2023년 7월 7일
0

코드잇-감정일기

목록 보기
5/5

FBV -> CBV

View

views.py함수형 뷰(FBV, Funtion Based View)클래스형 뷰(CBV, Class Based View)로 바꿔보도록 한다.
from django.views import View을 사용하면 FBV와 비슷하게 각 method별 작업을 해줘야 하기 때문에 Generic View를 사용하도록 한다.

ListView

class PageListView(ListView):
    model = Page
    ordering = ["-dt_created"]
    paginate_by = 8
    
    # template_name = "diarys/page_list.html"
    # context_object_name = "pages"

template_name: 템플릿을 따로 지정하지 않으면 ListView는 "(앱)/(Model)_list.html"을 찾기 때문에 템플릿 파일의 이름과 구조를 같게 하면 생략 가능하다.
context_object_name: 템플릿으로 넘기는 context의 키 값을 정하는 것으로 기본값은 "object_list" or "(Model)_list"로 list는 복수인 경우가 많기 때문에 변수의 어미에 list가 붙는다. 템플릿에서 따로 사용하고 싶은 값이 있다면 설정하고 기본값을 사용한다면 생략 가능하다.


DetailView

class PageDetailView(DetailView):
    model = Page
    
    # template_name = "diarys/page_detail.html"
    # pk_url_kwarg = "page_id"
    # context_object_name = "page"

template_name: DetailView에서는 "앱/(Model)_detail.html"
pk_url_kwarg: urls.py의 정수형 파라미터를 'page_id'가 아닌 'pk'를 사용하면 생략 가능하다. urls.py는 추후 기술
context_object_name: ListView와 달리 DetailView는 한 데이터만 가져오는 단수형이기 때문에 기본값으로 'object' or "(Model)"을 가진다.


CreateView

class PageCreateView(CreateView):
    model = Page
    form_class = PageForm
    
    # template_name = "diarys/page_form.html"

    def get_success_url(self):
        return reverse("page-detail", kwargs={"pk": self.object.id})

template_name: CreateView에서는 "앱/(Model)_form.html"
get_success_url: form이 성공적으로 생성되면 이동할 url설정


UpdateView

class PageUpdateView(UpdateView):
    model = Page
    form_class = PageForm
    
    # template_name = "diarys/page_form.html"
    # pk_url_kwarg = "page_id"

    def get_success_url(self):
        return reverse("page-detail", kwargs={"pk": self.object.id})

DeleteView

class PageDeleteView(DeleteView):
    model = Page
	
    # template_name = "diarys/page_confirm_delete.html"
    # pk_url_kwarg = "page_id"
    # context_object_name = "page"
    
    def get_success_url(self):
        return reverse("page-list")

template_name: DeleteView에서는 삭제하기 전 마지막 확인을 위해 "(Model)_delete.html"이 아닌 "(Model)_confirm_delete.html"파일을 찾아간다.

URL

urls.py

from django.urls import path
from . import views


urlpatterns = [
    path("", views.index, name="index"),
    path("diary/", views.PageListView.as_view(), name="page-list"),
    path("diary/info/", views.info, name="info"),
    path("diary/write/", views.PageCreateView.as_view(), name="page-create"),
    path("diary/page/<int:pk>/", views.PageDetailView.as_view(), name="page-detail"),
    path(
        "diary/page/<int:pk>/edit/",
        views.PageUpdateView.as_view(),
        name="page-update",
    ),
    path(
        "diary/page/<int:pk>/delete/",
        views.PageDeleteView.as_view(),
        name="page-delete",
    ),
]

path의 두번째 파라미터는 FBV는 views.(함수)이지만 CBV는 뒤에 as_view()를 넣어줘야 한다.

0개의 댓글