インデックスビューの作成
ビューは、リクエストオブジェクトを受け取って、レスポンスオブジェクトを返す役割を担います。では、http://localhost:8000/
にアクセスしたときに、online
アプリケーションのトップページが表示されるようにしてみましょう。recsys_django/online/views.py
に下記のコードを記述してください。
リスト1: recsys_django/online/views.py
from django.views.generic import View
from django.shortcuts import render
from django.http import HttpResponse
class IndexView(View):
"""インデックスビュー
Attributes
----------
context: dict
コンテキスト
"""
def __init__(self):
self.context = {}
def get(self, request, *args, **kwargs):
"""index.htmlをレンダリングしたレスポンスを取得する。
Parameters
----------
request : WSGIRequest
リクエスト
Returns
-------
HttpResponse
index.htmlをレンダリングしたレスポンスを返す。
"""
return render(request, 'index.html', self.context)
IndexView
は、インデックスビューに対応するクラスベースビューです。View
クラスを継承して定義します。クラスベースビューについては、文献[1][2]を参照してください。
このビューを呼ぶために、URLとビューとを対応付けておく必要があります。そのためにはURLconf
が必要になります。recsys_django/online/
にurls.py
を作成し、下記のコードを記述してください。
リスト2: recsys_django/online/urls.py
from django.urls import path
from . import views
app_name = 'online'
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
]
さらに、このrecsys_django/online/urls.py
の記述を反映させるために、次のように、recsys_django/recsys_django/urls.py
にdjango.urls.include
のimport
を追加し、urlpatterns
リストに'online.urls'
に対応したパスを追加してください。
リスト3: recsys_django/recsys_django/urls.py
from django.contrib import admin
from django.urls import path, include # includeを追加
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('online.urls')), # 追加
]
ここまでで、下記のコマンドを実行し、開発用Webサーバを起動しましょう。
(venv_recsys_django) $ python manage.py runserver
ブラウザで下記のURLにアクセスしてみましょう。
http://localhost:8000/
「recsys-djangoへようこそ!」と表示されました。base.html
で設計したように、インタフェースはナビゲーションバー、メインコンテンツ、フッターから構成されます。メインコンテンツには「recsys-djangoへようこそ!」と表示されています。ページのタイトルは「sushi recommender | recsys-django」となっています。ナビゲーションバーの右上には「サインアップ」と「ログイン」のリンクが表示されていますが、今はクリックしても何も反応しません。これらの機能は、後ほど実装していきます。
このページは、リスト1の18行目に記述されているように、IndexView
クラスのget()
メソッドにおいて、テンプレートがレンダリングされることで表示されます。URLにアクセスされた後、どのような流れでこのget()
メソッドが表示されるのかについては、次回でみてみましょう。
ビューの作成の詳細については、文献[3][4]を参照してください。
参考
- クラスベースビュー | Django ドキュメント | Django
- 現場で使える Django の教科書《基礎編》 # 5.2 ビュー関数の書き方(関数ベース vs クラスベース)
- はじめての Django アプリ作成、その 1 | Django ドキュメント | Django # はじめてのビュー作成
- 現場で使える Django の教科書《基礎編》 # 第5章 ビュー