본문 바로가기

Framework/Django

[Django] View - function-based view, class-based view

반응형

Django 에서는 비즈니스 로직에 따라 사용자의 요청을 처리하여 응답을 반환해주는 레이어를 View 라고 부른다. view 는 함수로 구현할 수도 있고, 클래스 형식으로도 구현할 수 있다. 이 글에서는 View 를 구현한 예제와 Django 에서 제공해주는 View 관련 기능들에 대해서 정리해본다.

1. View 사용 에제

- function-based views

함수형 뷰는 request 를 받아서 response 를 반환하는 로직을 함수로 구현한 것이다. 함수의 결과값인 response 는 html 웹 페이지나, 다른 주소로의 redirect, xml 문서, json 형식 데이터, 이미지 등등 다양한 형식이 될 수 있다.

 

View 함수는 일반적으로 django app 의 views.py 에 구현한다. 아래는 "Hello World" 라는 텍스트를 반환하는 view 함수이다.

 

# views.py
def hello_world(request):
    return HttpResponse("Hello World")

 

구현된 View django server 에서 제공하기 위해서는 특정 url 에 매핑해야 한다. 아래의 예제와 같이 django app urls.py 에 정의된 urlpatterns 에 해당 view 와 매핑할 url 에 대해 설정해 주어야 한다. 아래 예제는 "/world" 라는 주소에 hello_world 함수를 매핑했다.

 

# urls.py
urlpatterns = [
    path("world", views.hello_world, name="hello-world"),
]

 

이렇게 정의하고 django server 를 실행한 후 해당 url 에 접근하게 되면 "Hello World" 를 response 로 반환받을 수 있다.

- class-based views

View 를 구현할 때, 함수가 아닌 클래스 기반으로 구현할 수도 있다. 클래스로 view 를 구현하는 경우 django 에서 기본적으로 제공하는 여러 view 클래스들을 사용할 수도 있고, 구현한 클래스를 상속하여 기능을 재사용 할 수도 있다.

 

아래의 에제코드는 함수로 구현했던 hello_world view 를 클래스로 구현한 코드이다. Django 에서 제공하는 View 클래스를 상속해서 HelloWorldView 라는 클래스를 구현했다.

 

View 클래스는 django class-based view 의 가장 기본이 되는 클래스로 django 에서 제공하는 모든 view 클래스가 상속하고 있다. View 클래스는 requset 의 http method 에 따라 이에 매핑된 메서드에 의해 처리되도록 구현되어 있다. 예제와 같이 get() 메서드는 http method GET 에 매핑되어 GET request 를 처리하게된다. 자세한 로직은 다음 장에서 정리해보려한다.

 

# views.py
from django.views import View

class HelloWorldView(View):
    def get(self, request):
        return HttpResponse("Hello World")

 

HelloWorldView 클래스도 function-based view 와 같이 url 에 매핑해야 하는데, django url resolver 는 callable 객체를 호출하도록 되어있다. 이때문에 클래스 자체를 직접 매핑할 수는 없고 아래와 같이 as_view() 라는 클래스 메서드를 이용하여 callable 객체로 변환하여 매핑해줘야한다.

 

# urls.py
urlpatterns = [
	path("world", views.HelloWorldView.as_view(), name="hello-world-view"),
]

 

동일한 url 에 매핑하였지만 function-based view 와의 차이는 View 에 http method 에 따라 서로 다른 메서드들이 호출된다는 것이다. 이 예제에서는 GET 요청에 대해서만 처리가 되고 다른 http method 로 접근하는 경우에는 에러가 발생한다.

[References]

- https://docs.djangoproject.com/en/6.0/topics/http/views/

 

Writing views | Django documentation

The web framework for perfectionists with deadlines.

docs.djangoproject.com

- https://docs.djangoproject.com/en/6.0/topics/class-based-views/

 

Class-based views | Django documentation

The web framework for perfectionists with deadlines.

docs.djangoproject.com

- https://docs.djangoproject.com/en/6.0/ref/class-based-views/base/

 

Base views | Django documentation

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

 

반응형

'Framework > Django' 카테고리의 다른 글

[Django] Logging  (0) 2025.12.29
[Django] Caching  (1) 2025.12.27
[Django] Settings  (0) 2025.12.26
[Django] Model Query  (0) 2025.12.13
[Django] Model 정의와 Migration  (0) 2025.12.09