2023. 3. 10. 17:19ㆍ카테고리 없음
django.views.View 클래스를 상속받아서 클래스를 생성하면 Django에서 제공하는 클래스 기반 뷰(Class-based views)를 만들 수 있습니다. 이 클래스를 상속받아서 만든 뷰는 여러 가지 HTTP 메서드(GET, POST, PUT, DELETE 등)를 처리할 수 있으며, URL 매핑 시 해당 HTTP 메서드에 대한 처리를 담당하는 함수를 직접 작성할 필요가 없습니다.
django.views.View 클래스를 상속받아서 만들 수 있는 클래스 기반 뷰에는 다음과 같은 종류가 있습니다.
django.views.generic.base.View: 모든 HTTP 메서드를 지원하는 가장 기본적인 클래스 기반 뷰입니다.
django.views.generic.list.ListView: 모델의 모든 객체를 리스트로 보여주는 뷰입니다.
django.views.generic.detail.DetailView: 단일 모델 객체를 보여주는 뷰입니다.
django.views.generic.edit.CreateView: 모델에 새 객체를 생성하는 뷰입니다.
django.views.generic.edit.UpdateView: 모델의 기존 객체를 수정하는 뷰입니다.
django.views.generic.edit.DeleteView: 모델의 기존 객체를 삭제하는 뷰입니다.
django.views.generic.edit.FormView: 폼을 사용하는 뷰입니다.
예를 들어, ListView 클래스를 상속받아서 모든 객체를 보여주는 뷰를 작성할 수 있습니다. 다음은 ListView를 상속받아서 MyModel 모델의 모든 객체를 보여주는 뷰를 작성하는 예제입니다.
from django.views.generic.list import ListView
from myapp.models import MyModel
class MyModelListView(ListView):
model = MyModel
이제 위의 MyModelListView 클래스를 URL 매핑에 사용하여 모든 MyModel 객체를 보여주는 뷰를 생성할 수 있습니다.
from django.views import View
from django.http import HttpResponse
class MyView(View):
def get(self, request, *args, **kwargs):
return HttpResponse('This is a GET request')
def post(self, request, *args, **kwargs):
return HttpResponse('This is a POST request')
위 예제에서 MyView 클래스는 get과 post 메서드를 정의하여 각각 GET 요청과 POST 요청에 대한 응답을 처리하도록 구성되어 있습니다. request 인자는 Django의 HttpRequest 객체를 나타내며, *args와 **kwargs는 추가적인 인자를 받기 위한 것입니다.
이제 urls.py 파일에서 해당 클래스를 URL 매핑에 사용할 수 있습니다.
from django.urls import path
from myapp.views import MyView
urlpatterns = [
path('myview/', MyView.as_view(), name='myview'),
]
위의 예제에서 MyView.as_view() 메서드를 사용하여 MyView 클래스를 URL 매핑에 등록하였습니다.
이처럼 클래스 기반 뷰는 기능을 재사용하기 용이하며, 코드의 중복을 줄일 수 있습니다. 하지만 클래스 기반 뷰는 함수 기반 뷰보다 학습 곡선이 높은 단점이 있습니다.
클래스 기반 뷰는 다양한 속성과 메서드를 제공하므로, 이를 활용하여 원하는 동작을 구현할 수 있습니다. 자세한 내용은 Django 공식 문서를 참고하시기 바랍니다.