ビューの使用を開始する
プログラミングでは、通常、"ビュー" はユーザーに情報を表示するコンポーネントです。 データの読み込みを含むビューで実行されるタスクは、フレームワークと規約によって異なる可能性があります。
Django では、通常、ビューは次のことを行います。
- ユーザーの要求の検証。
- 適切なデータの読み込みまたは変更。
- 情報を含む HTML テンプレートをユーザーに返す。
手動でのビューの作成および適切な URLconfs の構成について説明して、探索を開始します。 URLconf は、一致させるパターン、呼び出す関数、オプションで名前を示すパスの一覧です。 後のユニットでは、手作業で記述したコードの一部を Django で自動的に処理する方法について説明します。
ビューの作成
Django でビューを最初から作成するには、通常、関数を作成します。 関数には、通常、次のような適切なコードが含まれています。
- ユーザーが要求したタスクを実行します。
- ユーザーに表示する適切なデータを含むテンプレートを返します。
ビュー関数では、ユーザーの要求を表す request
という名前のパラメーターを常に少なくとも 1 つ取ります。 必要に応じて、より多くのパラメーターを指定することができます。たとえば、項目の名前や ID など、URL 内のユーザーからの情報を増やす必要がある場合です。 ルートを作成するときに登録します。これについては、後のユニットで説明します。
データの読み込み
Django ORM を使用すると、登録されているデータベースから必要なデータを読み込むことができます。
ビルドしているプロジェクトには、Shelter
と Dog
という 2 つのモデルがあります。 作成したモデルを使用して、すべてのオブジェクトを読み込んだり、他のクエリを実行したりできます。 たとえば、すべてのシェルターを読み込むには、Shelter.objects.all()
を使用します。 個々のシェルターは、Shelter.objects.get(pk=1)
を使用して読み込むことができます。
Note
pk
は主キーのショートカットです。 id
を使用して、同じ結果を得ることができますが、主キーを表すプロパティを別の名前に変更した場合は、pk
を使用することで、コマンドが確実に動作するようになります。
404 エラー
Web アプリケーションで発生した 404 エラーは、"見つかりませんでした" という意味です。ベスト プラクティスとして、存在しないオブジェクトに対して要求が行われるたびに 404 を返す必要があります。
Django には、データの読み込みを試行するためのショートカットが用意されています。
get_object_or_404
およびget_list_or_404
: 主キーによってオブジェクトを読み込みます。または、オブジェクトが見つからない場合は 404 をユーザーに返します。get_list_or_404
: フィルター パラメーターを受け入れることを除いて、他のショートカットと同じ操作を実行します。
この演習では、get_object_or_404
を使用します。
テンプレートをレンダリングする
Django のテンプレート エンジンでは、ビルドした HTML テンプレートが取得され、提供した任意のデータと組み合わされて、ブラウザーの HTML が出力されます。 このタスクを実行するヘルパー関数は render
です。
render
関数は、要求を表すオブジェクトを必要とします。これは、前に強調した request
パラメーターです。 また、テンプレートの名前を渡します。通常は、templates という名前のフォルダーに格納されている HTML ファイルです。
テンプレートにデータを渡すには、render
に context
ディクショナリ オブジェクトを指定します。 context
オブジェクトには一連のキーと値のペアが含まれており、各キーがテンプレート内の変数になります。
例
すべてのシェルターを表示するビューを作成するには、次のコードを使用することができます。
def shelter_list(request):
shelters = Shelter.objects.all()
context = { 'shelters': shelters }
return render(request, 'shelter_list.html', context)
パスを登録する
ほとんどの Web フレームワークでは、パスを使用してユーザーの要求を処理します。 パスでは、ドメインの名前の後、(疑問符の後にある) クエリ文字列の前にある URL の部分が関数呼び出しに変換されます。
www.contoso.com/shelters
の呼び出しでは、すべてのシェルターを一覧表示する関数が呼び出されるのに対して、www.contoso.com/shelters/1
の呼び出しでは、ID が 1 のシェルターを表示する関数が呼び出されます。 URLconf を作成して、パスを Django に登録します。
views
という名前のモジュールがあるとします。これは Django の規約です。 次のパスを使用して、パスが指定されていないインデックス トラフィック (www.contoso.com
など) を index
という views
の関数にルーティングし、index
という名前を付けます。
path('', views.index, 'index')
また、特定の要求に対して仮想フォルダーを作成することもできます。 たとえば、他のユーザーが /shelters を要求した場合にすべてのシェルターを一覧表示するには、次のコマンドを使用します。
path('shelters', views.shelter_list, 'shelter_list')
URL パラメーター
ID や名前などの URL の一部として、アプリケーションにパラメーターを渡すのが一般的な方法です。 これらの値は変更されるため、パスにハードコードしないようにします。 Django では、特殊な構文を使用してパラメーターを指定できます。 この構文では、整数や名前など、予期していたデータの型を示すことができます。
たとえば、だれかが ID によって特定のシェルターを要求するためのパスを作成するには、integer
型のパラメーターが必要です。 (これは、主キーが整数であるためです)。次に、変数に使用する名前を指定できます。この名前は、パラメーターとしてビュー関数に渡されます。 このパラメーターを識別するための構文は <int:pk>
になります。 型宣言、コロン、変数の名前に注意してください。
完全なパスは次のようになります。
path('shelter/<int:pk>', views.shelter_detail, name='shelter_detail')
関連するビュー関数には、次のシグネチャがあります。
def shelter_detail(request, pk):
# code
パス シグネチャの pk
部分は、通常の Python 関数のように呼び出した場合と同様に、パラメーターとして shelter_detail
に渡されます。