IT/WEB

[Django] 클래스 베이스 뷰(Class Based View), 함수 베이스 뷰(Function Based View)

개발자 두더지 2022. 7. 1. 23:10
728x90

일본의 포스트를 번역한 글 입니다. 오역 및 의역, 직역이 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠습니다.

 

 Django 튜토리얼에는 함수 베이스 뷰로 작성되어 있지만 실제로 사용하는 것은 클래스 베이스 뷰인 경우가 대부분이다. 이 포스트에서는 이 두 가지에 대해 간단히 알아보고 왜 클래스 베이스 뷰가 주로 사용되는지에 대해 설명하도록 하겠다.

 

클래스 베이스 뷰와 함수 베이스 뷰


 클래스 베이스 뷰는 말 그대로 view.py에 Class로 처리를 기재하는 것을 의미하며, 함수 베이스 뷰는 함수는 처리를 함수로 기재하는 것을 뜻한다. 

 클래스 베이스 뷰는 Django에 이미 정의되어 있는 django.generic.view에서 View 클래스를 상속받거나 믹스인하여 작성하는 것이 특징이다.

 View 클래스는 어플리케이션 용도에 맞는 다양한 메소드가 이미 구현되어 있어, 이를 잘 사용하면 함수 베이스 뷰보다 훨씬 더 심플하고 알기 쉬운 코드가 되기 때문에 Django 튜토리얼에는 함수 베이스 뷰로 설명하고 있지만, 실제로는 클래스 베이스 뷰를 사용하는 경우가 대부분이며 클래스 베이스 뷰가 추천된다.

 함수 베이스 뷰는 제로 베이스에서 코드를 적어서 상세한 설정이 가능하지만(자유도가 높지만), 코드양이 많아져 복잡해지는 경향이 있다.

 간단한 코드로 두 가지 뷰를 비교해보자면 다음과 같다. 위가 클래스 베이스 뷰, 아래가 함수 베이스 뷰이다.

from django.http import HttpResponse

def hello(request):
    return HttpResponse("hello")

class HelloView(View):
    def get(self, request, *args, **kwargs):
        return HttpResponse("hello")

 

 

대표적인 View 클래스와 역할


뷰 클래스 개요 이용 화면 예시
View get(), post()등 HTTP 메소드에 특화된 뷰 화면전반
TemplateView 템플릿 파일의 읽어들이기, 페이 생성을 위한 편리한 기능이 있는 대표적인 뷰 화면전반
ListView 데이터 베이스와 연계하여, 여러 개 레코드의 특징 정보에 대해 목록으로 표시할 때에 사용 리스트 화면
DetailView 데이터 베이스와 연계하여, 하나의 레코드의 상세 정보를 표시할 때 사용 상세 화면
CreateView 데이터 베이스와 연계하여, 레코드 생성할 때 사용 신규등록, 추가 화면
UpdateView 데이터 베이스와 연계하여, 레코드 내용을 편집할 때 사용 편집화면
DeleteView 데이터 베이스와 연계하여, 레코드 삭제를 할 때 사용 삭제화면
FormView 폼(form)을 구현할 때 사용 문의 화면
LoginView 로그인 기능을 구현할 때 사용 로그인
APIView 외부 API를 이용하 로직 구축시에 이용. 구현시에는 Django Rest frame work의 지식이 필요 -

참고자료

https://kuma-server.com/django_view/#toc3

https://di-acc2.com/programming/python/5210/#%E3%82%AF%E3%83%A9%E3%82%B9%E3%83%99%E3%83%BC%E3%82%B9%E3%83%93%E3%83%A5%E3%83%BC-class-based-views-%E3%81%A8%E3%81%AF

https://zenn.dev/ikemo/articles/django-class-based-view-or-function-based-view

728x90