EMDI는 지금도 개발중

Django 클래스 기반 뷰와 함수 기반 뷰 차이점 본문

IT/잡다한지식

Django 클래스 기반 뷰와 함수 기반 뷰 차이점

EMDI 2020. 6. 19. 11:21

* 해당 글은 장고(Django)의 클래스형 뷰와 함수형 뷰의 차이점에 대해 공부하고자 기록한 내용입니다. 글의 내용은 한 블로그에서 작성한 내용을 토대로 재정리한 내용이기에 원문을 원하시는 분들은 아래의 링크를 참고해주세요.

 

Class-Based Views vs. Function-Based Views

If you follow my content here in the blog, you probably have already noticed that I’m a big fan of function-basedviews. Quite often I use them in my examples...

simpleisbetterthancomplex.com

 

from django.shortcuts import render, redirect
from django.views.generic import TemplateView, ListView, DetailView

from .models import Team
from .forms import TeamCreate
from django.http import HttpResponse

# Class-Based Views
class IndexView(TemplateView):
    template_name = 'index.html'

class TeamInfoView(ListView):
    model = Team
    template_name = 'content/teamInfo.html'
    context_object_name = 'teams'

class TeamCreateView(ListView):
    model = Team
    template_name = 'content/teamInsert.html'
    context_object_name = 'teams'

#----------------------------------------------------------------
# Function-Based Views
def index(request):
    return render(request, 'index.html')

def teamInfo(request):
    return render(request, 'content/teamInfo.html')

def createTeam(request):
    return render(request, 'content/teamInsert.html')

 

 

현재 공부목적으로 장고 웹 프로젝트를 만들고 있는데 작업하는 도중에 궁금증이 생겨버렸습니다. 그것은 바로 클래스 기반 뷰와 함수 기반 뷰 중 어떤 것이 좋은 것인가! 어떤 블로그는 클래스 기반 뷰로 쭉 사용하고 어떤 블로그는 함수형이 편하기에 함수 기반 뷰로 쭉 사용한다고 하고 참고하는 블로그마다 이렇게 각양각색이다보니 갈피를 못잡겠더라고요. 그래서 공부하자! 도대체 얘네들의 차이점은 무엇인가!


1. 클래스 기반 뷰의 예

# views.py
from django.views import View

class ContactView(View):
    def get(self, request):
        # Code block for GET request

    def post(self, request):
        # Code block for POST request
        
# urls.py
urlpatterns = [
    url(r'contact/$', views.ContactView.as_view(), name='contact'),
]

일반 클래스 기반은 새 개체 작성, 양식 처리, 목록보기, 페이지 매김, 아카이브보기 등과 같은 웹 응용 프로그램의 일반적인 사용 사례를 해결하기 위해 도입되었다고 한다. 그것들은 django.views.generic 모듈에서 구현할 수 있다. 

*  내장 클래스 기반 뷰의 문서

 

Built-in class-based views API | Django documentation | Django

The Django Software Foundation deeply values the diversity of our developers, users, and community. We are distraught by the suffering, oppression, and systemic racism the Black community faces every day. We can no longer remain silent. In silence, we are

docs.djangoproject.com

 

2. 함수 기반 뷰의 예

# views.py
def contact(request):
    if request.method == 'POST':
        # Code block for POST request
    else:
        # Code block for GET request (will also match PUT, HEAD, DELETE, etc)

# urls.py
urlpatterns = [
    url(r'contact/$', views.contact, name='contact'),
]

 

3. 클래스기반 뷰와 함수기반 뷰의 장단점

  장점 단점
클래스기반 뷰 - 쉽게 확장하고 재사용할 수 있는 코드
- mixin(다중상속)과 같은 기술을 사용가능
- 별도의 클래스 메소드로 HTTP메소드 처리
- 내장 도니 일반 클래스 기반 뷰
- 읽기가 어렵다
- 암시적 코드 흐름
- 부모클래스의 숨겨진 코드, 믹스 인
- 뷰 데코레이터를 사용하려면 추가 가져오기 또는 메소드 재정의가 필요
함수기반 뷰 - 간단한 구현
- 읽기 쉽다
- 명시적 코드흐름
- 데코레이터의 간단한 사용법
- 코드를 확장하고 재사용하기 어려움
- 조건부 분기를 통한 HTTP 메소드 처리

 

'IT > 잡다한지식' 카테고리의 다른 글

HTTP 상태 코드  (0) 2021.07.14
C# : Convert 금액 정수 형식의 특성  (0) 2021.04.15
웹 소켓(WebSocket)  (0) 2020.06.10
자료 구조 list, set, map의 차이  (0) 2020.03.27
Spring에서 사용하는 MVC패턴  (0) 2020.03.27
Comments