ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Django] CBV(generic view)
    카테고리 없음 2020. 8. 4. 20:35

    왜 굳이 클래스?

    function = class = callable object
    django의 view는 호출가능한 객체로 정의한다.

    함수로 작성한 것과 뭔차이?

    상속
    중복의 제거, 코드의 재사용

    중복 코드 -> 부모 클래스
    새로운 코드 -> 부모 클래스 상속한 자식 클래스

    그럼 FBV는??

    미리 약속된 값을 지키는 것보다 내 생각대로 후루룩쓰는게 편하겠죠?

    crud 중 delete 만 예시로 들겠습니다.

    generic view를 사용했을 때 urls.py

    path('delete/<int:pk>', views.BlogDelete.as_view(), name='delete')

    views.py 를 봅시다!

    from django.urls import reverse_lazy #url redirect
    from django.views.generic.list import ListView
    from django.views.generic.detail import DetailView
    from django.views.generic.edit import CreateView, UpdateView, DeleteView
    from .models import ClassBlog
    
    class BlogView(ListView):
        model = ClassBlog
    
    class BlogCreate(CreateView):    
        model = ClassBlog
        field - ['title', 'body'] #모델의 필드 중에 title, body만 직접 쓰겠다.
        success_url = reverse_lazy('list')
    
    class BlogDetail(DetailView):    
        model = ClassBlog
    
    class BlogUpdate(UpdateView):    
        model = ClassBlog
        field - ['title', 'body']
        success_url = reverse_lazy('list')
    
    class BlogDelete(DeleteView):
        modle = ClassBlog
        success_url = reverse_lazy('list')

    templates 과 관련된 규약들

    html의 default로 설정된 표준 이름을 먼저 준수해야한다.

    class BlogView(ListView):        #html : 블로그 리스트를 담은 html : (소문자모델)_list.html
    class BlogCreate(CreateView):    #html : form(입력공간)을 갖고있는 html : (소문자모델)_form.html
    class BlogDetail(DetailView):    #html : 상세 페이지를 담은 html :(소문자모델)_detail.html
    class BlogUpdate(UpdateView):    #html : form(입력공간)을 갖고있는 html : (소문자모델)_form.html
    class BlogDelete(DeleteView):    #html : "이거 진짜 지울거야?" html : (소문자모델)_confirm_delete.html

    마음대로 template이름을 바꾸려면 따로 명시해야한다.

    class BlogView(ListView):
        template_name = 'classcrud/list.html'
        model = ClassBlo

    객체를 object로 표현하면 어떻게 구분하나?

    {% for blog in object_list %}
    object가 여러개면? 사진 object 또는 게시글 object 등등

    class BlogView(ListView):
        template_name = 'classcrud/list.html'
        context_object_name = 'blog_list'
        model = ClassBlo

    {% for blog in blog_list %}

Designed by Tistory.