SlideShare une entreprise Scribd logo
1  sur  12
김석훈
2017 파이썬 연말 세미나, 2017.12. 9
 kimseokhun@gmail.com
 파이썬 웹 프로그래밍. 2권 (한빛미디어)
 책 예제 소스 업데이트 (Py3.6, Dj1.11)
 한빛미디어 홈페이지
 Facebook: Django / Ask Django 그룹
2 / 12
 여러분이 선택하는 게 정답
 저의 경험으로는,
 CBV 를 주로 사용합니다.
 장고 입문자에게 적극 권장
 CBV 바로 시작할 수 있어요.
3 / 12
분 류 지네릭 뷰 이름 뷰의 기능 또는 역할
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
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
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
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
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
 바로 시작할 수 있습니다.
 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
 ccbv.co.uk 사이트 필수
10 / 12
 더 자주 Method Overriding
 장고 지네릭뷰에서 제공하는 속성과 메소드들 이해
 소스 읽기, 처리 순서 이해
 Generic Mixin도 섞어보고
 장고 지네릭뷰에서 제공하는 Mixin 클래스를 사용
 나만의 클래스 뷰 작성
 부가기능의 Mixin 클래스도 시도해보고
 자신만의 클래스뷰도 작성해보고
 상속도 활용해 보자
11 / 12
 CBV 어렵지 않게 시작할 수 있다.
 CBV 는 장고를 쉽게 해주는 장점
 장고 입문자에게 적극 권장
 CBV 장점
 (공홈) GET/POST method 로 구분, 상속 등 OOP 가능
 Error-free
 Class-friendly
 다른 의견도 있어요 – 네트워킹 세션에서
 Q&A
 FBV 장점, CBV 단점
 여러분의 경험 등 서로 공유
12 / 12

Contenu connexe

Similaire à 20171209pycon_fbv_cbv

컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
우영 주
 

Similaire à 20171209pycon_fbv_cbv (20)

#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
 
Django와 flask
Django와 flaskDjango와 flask
Django와 flask
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
XE Open seminar 테마만들기
XE Open seminar 테마만들기XE Open seminar 테마만들기
XE Open seminar 테마만들기
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
Xe hack
Xe hackXe hack
Xe hack
 
Webframeworks angular js 세미나
Webframeworks angular js 세미나Webframeworks angular js 세미나
Webframeworks angular js 세미나
 
스프링 3.0 RESTful & restTemplate
스프링 3.0  RESTful & restTemplate스프링 3.0  RESTful & restTemplate
스프링 3.0 RESTful & restTemplate
 
경상대 멋쟁이사자처럼 8기 정기세션 (6장 Blog프로젝트 - Model,admin).pptx
경상대 멋쟁이사자처럼 8기 정기세션 (6장 Blog프로젝트 - Model,admin).pptx경상대 멋쟁이사자처럼 8기 정기세션 (6장 Blog프로젝트 - Model,admin).pptx
경상대 멋쟁이사자처럼 8기 정기세션 (6장 Blog프로젝트 - Model,admin).pptx
 
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
예제로 맛보는 Backbone 연습
예제로 맛보는 Backbone 연습예제로 맛보는 Backbone 연습
예제로 맛보는 Backbone 연습
 
8.Spring DI_3
8.Spring DI_38.Spring DI_3
8.Spring DI_3
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp
 
신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판
 
Java, android 스터티7
Java, android 스터티7Java, android 스터티7
Java, android 스터티7
 
거 XE 모듈 개발하기 좋은 날씨네 - XECon + PHPFest 2014
거 XE 모듈 개발하기 좋은 날씨네 - XECon + PHPFest 2014거 XE 모듈 개발하기 좋은 날씨네 - XECon + PHPFest 2014
거 XE 모듈 개발하기 좋은 날씨네 - XECon + PHPFest 2014
 
REST API Development with Spring
REST API Development with SpringREST API Development with Spring
REST API Development with Spring
 

20171209pycon_fbv_cbv

  • 1. 김석훈 2017 파이썬 연말 세미나, 2017.12. 9
  • 2.  kimseokhun@gmail.com  파이썬 웹 프로그래밍. 2권 (한빛미디어)  책 예제 소스 업데이트 (Py3.6, Dj1.11)  한빛미디어 홈페이지  Facebook: Django / Ask Django 그룹 2 / 12
  • 3.  여러분이 선택하는 게 정답  저의 경험으로는,  CBV 를 주로 사용합니다.  장고 입문자에게 적극 권장  CBV 바로 시작할 수 있어요. 3 / 12
  • 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. 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. 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. 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. 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.  바로 시작할 수 있습니다.  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.  ccbv.co.uk 사이트 필수 10 / 12
  • 11.  더 자주 Method Overriding  장고 지네릭뷰에서 제공하는 속성과 메소드들 이해  소스 읽기, 처리 순서 이해  Generic Mixin도 섞어보고  장고 지네릭뷰에서 제공하는 Mixin 클래스를 사용  나만의 클래스 뷰 작성  부가기능의 Mixin 클래스도 시도해보고  자신만의 클래스뷰도 작성해보고  상속도 활용해 보자 11 / 12
  • 12.  CBV 어렵지 않게 시작할 수 있다.  CBV 는 장고를 쉽게 해주는 장점  장고 입문자에게 적극 권장  CBV 장점  (공홈) GET/POST method 로 구분, 상속 등 OOP 가능  Error-free  Class-friendly  다른 의견도 있어요 – 네트워킹 세션에서  Q&A  FBV 장점, CBV 단점  여러분의 경험 등 서로 공유 12 / 12