ビューの使用を開始する

完了

プログラミングでは、通常、"ビュー" はユーザーに情報を表示するコンポーネントです。 データの読み込みを含むビューで実行されるタスクは、フレームワークと規約によって異なる可能性があります。

Django では、通常、ビューは次のことを行います。

  • ユーザーの要求の検証。
  • 適切なデータの読み込みまたは変更。
  • 情報を含む HTML テンプレートをユーザーに返す。

手動でのビューの作成および適切な URLconfs の構成について説明して、探索を開始します。 URLconf は、一致させるパターン、呼び出す関数、オプションで名前を示すパスの一覧です。 後のユニットでは、手作業で記述したコードの一部を Django で自動的に処理する方法について説明します。

ビューの作成

Django でビューを最初から作成するには、通常、関数を作成します。 関数には、通常、次のような適切なコードが含まれています。

  • ユーザーが要求したタスクを実行します。
  • ユーザーに表示する適切なデータを含むテンプレートを返します。

ビュー関数では、ユーザーの要求を表す request という名前のパラメーターを常に少なくとも 1 つ取ります。 必要に応じて、より多くのパラメーターを指定することができます。たとえば、項目の名前や ID など、URL 内のユーザーからの情報を増やす必要がある場合です。 ルートを作成するときに登録します。これについては、後のユニットで説明します。

データの読み込み

Django ORM を使用すると、登録されているデータベースから必要なデータを読み込むことができます。

ビルドしているプロジェクトには、ShelterDog という 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 ファイルです。

テンプレートにデータを渡すには、rendercontext ディクショナリ オブジェクトを指定します。 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 に渡されます。