Search

View

URLconf

URL은 view와 template을 이어주는 역할을 하고, 이 부분을 만들어 주는 작업

View

뷰는 웹 요청을 받고, 전달받은 데이터들을 해당 어플리케이션의 로직으로 가공하여, 그 결과를 템플릿에 보내준다.
데이터를 가공하는 처리를 해야한다 싶으면 뷰에서 함수를 작성하면 된다.
view를 작성하는 두 가지 방법
1.
함수형 뷰 (FBV; Function based view)
2.
클래스형 뷰 (CBV; Class based view)
상속/재사용이 많이 필요한 프로젝트의 경우에는 CBV, 그렇지 않은 경우에는 FBV를 사용
장점
단점
FBV
편하게 구현 가능 읽기 편한 로직 데코레이터 사용 명료
확장 / 재사용 어려움
CBV
확장 / 재사용 용이 다중 상속, Mixin 가능 HTTP Method가 클래스 안에서 나누어 처리 강력한 Generic Class View
읽기 어려움 상속, Mixin으로 인해 코드 이해를 위해 여러 곳을 찾아봐야 함

FBV

뷰를 작성할 때 함수 형식으로 작성하는 방식
# urls.py urlpatterns = [ path('', views.index, name='index') ]
Python
복사
# views.py @api_view(['GET', 'POST']) def index(request): if request.method == 'POST': return HttpResponse("Post method") else: return HttpResponse("Get method")
Python
복사

CBV

뷰를 작성할 때 클래스 형식으로 작성하는 방식
# urls.py urlpatterns = [ path('', views.IndexView.as_view(), name='index') ]
Python
복사
# views.py from django.views import View class IndexView(View): def post(self, request): return HttpResponse("Post method") def get(self, request): return HttpResponse("Get method")
Python
복사

Generic CBV

모델: ivew가 작동하는 장고 모델을 정의.
fields: 장고에서 폼을 생성하는 데 사용됨 (또는 form_class를 제공할 수도 있습니다).
template_name: 사용할 템플릿을 정의 (기본값 : /<앱_이름>/<모델_이름>_form.html)
context_object_name: 모델 인스턴스가 템플릿에 전달되는 컨텍스트 키를 정의 (기본값은 object)
success_url: 성공 시 사용자가 리디렉션되는 위치를 정의 (또는 모델에서get_absolute_url을 설정할 수 있음).
from django.views.generic import ListView, DetailView, DeleteView, UpdateView, CreateView class TaskListView(ListView): model = Task context_object_name = 'tasks' class TaskCreateView(CreateView): model = Task context_object_name = 'task' fields = ('name', 'description', 'is_done') template_name = 'todo/task_create.html' class TaskDetailView(DetailView): model = Task context_object_name = 'task' class TaskUpdateView(UpdateView): model = Task context_object_name = 'task' fields = ('name', 'description', 'is_done') template_name = 'todo/task_update.html' class TaskDeleteView(DeleteView): model = Task context_object_name = 'task' success_url = '/'
Python
복사