Menu
CoddyTech

Viewクラス

CoddyのDjangoジャーニー「クラスベースビュー」セクションの一部。レッスン 1/18。

このセクションでは求人掲示板を作成します。そのホームページは、これまでのすべてのビューと同様、関数ビューです。Djangoでは、ビューをクラスとして記述することもできます。Viewをサブクラス化し、HTTPメソッドごとに1つずつメソッドを追加します。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に置き換えます。これは、get()がhomeと同じ処理を行うViewです。
  • 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プレイグラウンド