Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20171209pycon_fbv_cbv

69 views

Published on

Django, Which is better between FBV and CBV ?

Published in: Technology
  • Be the first to comment

  • Be the first to like this

20171209pycon_fbv_cbv

  1. 1. 김석훈 2017 파이썬 연말 세미나, 2017.12. 9
  2. 2.  kimseokhun@gmail.com  파이썬 웹 프로그래밍. 2권 (한빛미디어)  책 예제 소스 업데이트 (Py3.6, Dj1.11)  한빛미디어 홈페이지  Facebook: Django / Ask Django 그룹 2 / 12
  3. 3.  여러분이 선택하는 게 정답  저의 경험으로는,  CBV 를 주로 사용합니다.  장고 입문자에게 적극 권장  CBV 바로 시작할 수 있어요. 3 / 12
  4. 4. 분 류 지네릭 뷰 이름 뷰의 기능 또는 역할 Base View View 가장 기본이 되는 최상위 지네릭 뷰입니다. 다른 모든 지네릭 뷰들은 View의 하위 클래스입니다. TemplateView 템플릿이 주어지면 해당 템플릿을 렌더링해줍니다. RedirectView URL이 주어지면 해당 URL로 리다이렉트시켜줍니다. Generic Display View DetailView 객체 하나에 대한 상세한 정보를 보여줍니다. ListView 조건에 맞는 여러 개의 객체를 보여줍니다. Generic Edit View FormView 폼이 주어지면 해당 폼을 보여줍니다. CreateView 객체를 생성하는 폼을 보여줍니다. UpdateView 기존 객체를 수정하는 폼을 보여줍니다. DeleteView 기존 객체를 삭제하는 폼을 보여줍니다. Generic Date View ArchiveIndexView 조건에 맞는 여러 개의 객체 및 그 객체들에 대한 날짜 정보를 보여줍니다. YearArchiveView 년도가 주어지면 그 년도에 해당하는 객체들을 보여줍니다. MonthArchiveView 연, 월이 주어지면 그에 해당하는 객체들을 보여줍니다. WeekArchiveView 연도와 주차(week)가 주어지면 그에 해당하는 객체들을 보여줍니다. DayArchiveView 연, 월, 일이 주어지면 그 날짜에 해당하는 객체들을 보여줍니다. TodayArchiveView 오늘 날짜에 해당하는 객체들을 보여줍니다. DateDetailView 연, 월, 일, 기본키(또는 슬러그)가 주어지면 그에 해당하는 특정 객체 하나에 대한 상세한 정보를 보여줍니다. 4 / 12
  5. 5. def post_list(request): qsPost = Post.objects.all() paginate_by = 2 paginator = Paginator(qsPost, paginate_by) page = request.GET.get('page', 1) try: page_obj = paginator.page(page) except PageNotAnInteger: page_obj = paginator.page(1) except EmptyPage: page_obj = paginator.page(paginator.num_pages) return render(request, 'blog/post_list.html', { ‘object_list': page_obj.object_list, 'page_obj': page_obj, }) class PostLV(ListView) : model = Post paginate_by = 2 5 / 12
  6. 6. def post_detail(request, slug): objPost = get_object_or_404(Post, slug=slug) return render(request, 'blog/post_detail.html', { 'object': objPost, }) class PostDV(DetailView) : model = Post 6 / 12
  7. 7. def post_form(request): if request.method == "POST": form = MyForm(request.POST) if form.is_valid(): # cleaned_data로 관련 로직 처리 return HttpResponseRedirect('/success/') else: form = MyForm(initial={'key': 'value'}) return render(request, 'form_template.html', { 'form': form }) class MyFormView(FormView): form_class = MyForm template_name = 'form_template.html' success_url = '/thanks/' def form_valid(self, form): # cleaned_data로 관련 로직 처리 return super(MyFormView, self).form_valid(form) 7 / 12
  8. 8. def post_create(request): if request.method == 'POST': form = PostForm(request.POST, request.FILES) if form.is_valid(): post = form.save(commit=False) post.owner = request.user post.save() return redirect('/success_url/') else: form = PostForm() return render(request, 'blog/post_form.html', { 'form': form, }) class PostCreateView(LoginRequiredMixin, CreateView): model = Post success_url = reverse_lazy('blog:index') def form_valid(self, form): form.instance.owner = self.request.user return super(PostCreateView, self).form_valid(form) 8 / 12
  9. 9.  바로 시작할 수 있습니다.  ListView, DetailView, TemplateView, RedirectView  CBV 활용 목적 이해 (구두로 이해할 정도면 됨)  목적에 딱! 맞는 경우만 CBV 사용, 그외는 FBV 혼용  ListView, DetailView  TemplateView, RedirectView  FormView, CreateView, UpdateView  ArchiveIndexView, YearArchiveView, …  오버라이딩 몇가지만으로 가능함  model, queryset, template_name, form_class, success_url 등  get_queryset(), get_context_data(), form_valid() 등  경험이 쌓이면서, 오버라이딩을 늘려 나감 9 / 12
  10. 10.  ccbv.co.uk 사이트 필수 10 / 12
  11. 11.  더 자주 Method Overriding  장고 지네릭뷰에서 제공하는 속성과 메소드들 이해  소스 읽기, 처리 순서 이해  Generic Mixin도 섞어보고  장고 지네릭뷰에서 제공하는 Mixin 클래스를 사용  나만의 클래스 뷰 작성  부가기능의 Mixin 클래스도 시도해보고  자신만의 클래스뷰도 작성해보고  상속도 활용해 보자 11 / 12
  12. 12.  CBV 어렵지 않게 시작할 수 있다.  CBV 는 장고를 쉽게 해주는 장점  장고 입문자에게 적극 권장  CBV 장점  (공홈) GET/POST method 로 구분, 상속 등 OOP 가능  Error-free  Class-friendly  다른 의견도 있어요 – 네트워킹 세션에서  Q&A  FBV 장점, CBV 단점  여러분의 경험 등 서로 공유 12 / 12

×