Django 기본 04 - Class Based View 응답예시 (JSON, 템플릿)
19 Mar 2017 | python 파이썬 DjangoAskDjango 수업을 듣고 중요한 내용을 정리하였습니다.
Class Based View (CBV)
django.views.generic
: 뷰 사용패턴을 일반화 시켜놓은 뷰의 모음.as_view()
: 클래스함수를 통해, FBV를 생성해주는 클래스- FBV로 구현한 view는 CBV로도 구현 할 수는 있다. 하지만 CBV는 패턴화 되어 있는 뷰를 처리할 때 효율적으로 처리 할 수 있다. (적은 코드로 뷰를 구현할 수 있음)
- 공부할 때 처음에는
함수기반 뷰(FBV)
로 구현을 많이 해보고 나서,클래스기반 뷰(CBV)
를 사용하는 것이 좋다. (FBV를 충분히 이해하지 않은 상태에서 CBV를 사용하면 나중에 코드가 산으로 갈 위험이 있다.)
FBV 예시
- 직접 문자열로 HTML 형식 리스폰스
- 템플릿을 통해 HTML 형식 리스폰스
- JSON 형식 리스폰스
- 파일 다운로드 리스폰스
직접 문자열로 HTML 형식 리스폰스
from django.http import HttpResponse
from django.views.generic import View
class PostListView1(View):
def get(self, request):
name = '공유'
html = self.get_template_string().format(name=name)
return HttpResponse(html)
def get_template_string(self):
return '''
<h1> hello, </h1>
<p>{name}</p>
<p>반가워요</p>
'''
post_list1 = PostListView1.as_view()
템플릿을 통해 HTML 형식 리스폰스
from django.views.generic import View, TemplateView
class PostListView2(TemplateView):
template_name = 'dojo/post_list.html'
def get_context_data(self):
context = super().get_context_data()
context['name'] = '공유'
return context
post_list2 = PostListView2.as_view()
JSON 형식 리스폰스
from django.http import HttpResponse, JsonResponse
from django.views.generic import View, TemplateView
class PostListView3(View):
def get(self,request):
return JsonResponse(self.get_data(), json_dumps_params={'ensure_ascii': True})
def get_data(self):
return{
'message' : '안녕 파이썬 장고',
'items' : ['파이썬', '장고', 'AWS', 'Azure'],
}
post_list3 = PostListView3.as_view()