Menu
CoddyTech

뷰 클래스

Coddy Django 여정의 클래스 기반 뷰 섹션에 포함된 레슨. 18개 중 1번째.

이 섹션에서는 구인 게시판을 만들며, 지금까지의 모든 뷰와 마찬가지로 홈페이지는 함수형 뷰입니다. Django에서는 뷰를 클래스로 작성할 수도 있습니다. View를 서브클래싱하고 각 HTTP 메서드에 해당하는 메서드를 하나씩 추가하면 됩니다. GET 요청은 get()을 호출하고, POST 요청은 post()를 호출합니다.

from django.views import View


class RecipeCountView(View):
    def get(self, request):
        total = Recipe.objects.count()
        return HttpResponse(f"{total} recipes")

메서드는 self와 request를 인수로 받고, 함수형 뷰와 마찬가지로 응답을 반환합니다. 경로에는 함수가 필요하며, .as_view()를 사용하면 클래스에서 함수를 만들 수 있습니다. path("count/", views.RecipeCountView.as_view()) 요청이 들어올 때마다 이 함수는 클래스의 새 객체를 만들고 요청에 해당하는 메서드를 호출합니다.

이 경우의 POST처럼 클래스에 정의되지 않은 메서드에는 405 Method Not Allowed가 반환됩니다. 다음 내용에서 그 장점을 살펴보겠습니다. Django에는 흔히 필요한 작업을 이미 처리하는 클래스가 제공됩니다.

challenge icon

챌린지

쉬움

홈 페이지를 클래스로 바꾸세요:

  • jobs/views.py에서 함수 home을 HomeView로 바꾸세요. View를 상속하는 클래스이며, get()은 home이 하던 작업을 수행해야 합니다.
  • jobs/urls.py에서 경로 ""가 이 클래스를 가리키도록 하세요. name="home"은 그대로 두세요.

실행을 누르세요. 홈 페이지에는 여전히 12 jobs open이라고 표시됩니다.

직접 해보기

from django.shortcuts import render

from .models import Job


def home(request):
    count = Job.objects.count()
    return render(request, "jobs/home.html", {"count": count})

클래스 기반 뷰의 모든 레슨

직접 연습해 보세요: Django 플레이그라운드