パート2
簡単なビューを定義

簡単なビューを定義する

Django は前項の「モデル」の他に、大きく分けて「ビュー」と「テンプレート」の 2 つの要素で構成されています。

ここでは、まず「ビュー」の入門として、簡単なビューを定義してみましょう。

ビューとは

「ビュー」とは、ユーザーからのリクエストを受け取り、レスポンスを返すための関数のことです。

例えば、ユーザーが http://example.com/hello/ という URL にアクセスしたときに、Hello, World! という文字列を返すようなビューを定義することができます。

このとき、Django のアプリケーションは、/hello/ という URL にアクセスされたときに、例えば show_hello という名前のビューを呼び出し、そのビュー(関数)が返した HTTP レスポンスをユーザーに返します。

実際に見てみましょう。

ビューを定義する

すでに作成した accounts アプリケーションの views.py に、以下のようなビューを定義してみましょう。

accounts/views.py
from django.http import HttpResponse
 
def show_hello(request):
    return HttpResponse('Hello, World!')

このビューは Python の関数として定義されています。 そのため、このようなビューを "function-based view" と呼びます。

このビューは request という引数を受け取り、HttpResponse オブジェクトを返しています。

function-based view は必ず request という引数を受け取り、何らかの HTTP レスポンスを返す必要があります。 ここでは、Django が用意している HttpResponse クラスを利用することで、簡単に HTTP レスポンスを返すことができます。

ここではビューがどのような働きをしているのかを理解するために function-based view を定義しましたが、実際には function-based view はあまり使われません。 あらゆる処理をすべて一から書く必要があるため、開発効率が悪くなってしまうからです。 そのため、Django では function-based view の代わりに class-based view というものを利用することが多くなっています。 これを利用すると、あらかじめ用意されている Python のクラスを継承するだけで、簡単にビューを定義することができます。 後ほど見てみましょう。

URL とビューを紐付ける

ビューを定義したら、次にそのビューを URL と紐付ける必要があります。 /hello/ という URL にアクセスされたときに、先ほど定義した show_hello というビューを呼び出すように設定する必要があるのです。

URL とビューを紐付けるには、urls.py を使用します。 このファイルはデフォルトではプロジェクトのディレクトリにしか存在しないため、accounts アプリケーションのディレクトリに新しく urls.py を作成し、以下のように定義してみましょう。

accounts/urls.py
from django.urls import path
 
from .views import show_hello
 
urlpatterns = [
    path("hello/", show_hello),
]

urlpatterns というリストに、path という関数を使って URL とビューを紐付けています。

さらに、プロジェクト全体の urls.py に、accounts アプリケーションの urls.py をインクルードする必要があります。 mysite/urls.py を以下のように修正してみましょう。

mysite/urls.py
from django.contrib import admin
from django.urls import include, path
 
 
urlpatterns = [
    path("admin/", admin.site.urls),
    path("accounts/", include("accounts.urls")),  # 追記
]

これにより、/accounts/ という URL にアクセスされたときに、accounts アプリケーションの urls.py に定義されている URL とビューの紐付けを探しに行くようになります。

これで、/accounts/hello/ という URL にアクセスすると、先ほど定義した show_hello というビューが呼び出されるようになりました。

http://127.0.0.1:8000/accounts/hello/ (opens in a new tab) にアクセスしてみましょう。 Hello, World! という文字列が表示されていれば成功です。