ビューを書く
ビュー関数、または略して view は、Web要求を受け取り、Web応答を返す単純なPython関数です。 この応答は、WebページのHTMLコンテンツ、リダイレクト、404エラー、XMLドキュメント、または画像の場合があります。 . . または何か、本当に。 ビュー自体には、その応答を返すために必要な任意のロジックが含まれています。 このコードは、Pythonパス上にある限り、どこにでも配置できます。 他の要件はありません。いわば「魔法」はありません。 コードをどこかに配置するために、慣例では、プロジェクトまたはアプリケーションディレクトリに配置されたviews.py
というファイルにビューを配置します。
シンプルなビュー
これは、現在の日付と時刻をHTMLドキュメントとして返すビューです。
このコードを一度に1行ずつ見ていきましょう。
まず、Pythonの
datetime
ライブラリとともに、 django.http モジュールからクラス HttpResponse をインポートします。次に、
current_datetime
という関数を定義します。 これが表示機能です。 各ビュー関数は、最初のパラメーターとして HttpRequest オブジェクトを取ります。これは通常、request
という名前です。ビュー関数の名前は重要ではないことに注意してください。 Djangoがそれを認識するために、特定の方法で名前を付ける必要はありません。 ここでは
current_datetime
と呼んでいます。これは、その名前がその機能を明確に示しているためです。ビューは、生成された応答を含む HttpResponse オブジェクトを返します。 各ビュー関数は、 HttpResponse オブジェクトを返す役割を果たします。 (例外はありますが、後で説明します。)
Djangoのタイムゾーン
Djangoには、デフォルトでAmerica/Chicago
に設定されている:setting: `TIME_ZONE` 設定が含まれています。 これはおそらくあなたが住んでいる場所ではないので、設定ファイルで変更することをお勧めします。
URLをビューにマッピングする
したがって、要約すると、このビュー関数は現在の日付と時刻を含むHTMLページを返します。 このビューを特定のURLで表示するには、 URLconf を作成する必要があります。 手順については、 URLディスパッチャーを参照してください。
エラーを返す
DjangoでHTTPエラーコードを返すのは簡単です。 200以外の多くの一般的なHTTPステータスコード(「OK」を意味する)には、 HttpResponse のサブクラスがあります。 使用可能なサブクラスの完全なリストは、 request / response のドキュメントにあります。 エラーを示すために、通常の HttpResponse の代わりに、これらのサブクラスの1つのインスタンスを返すだけです。 例えば:
それらの多くはそれほど一般的ではないため、考えられるすべてのHTTP応答コードに特化したサブクラスはありません。 ただし、 HttpResponse のドキュメントに記載されているように、HTTPステータスコードを HttpResponse のコンストラクターに渡して、任意のステータスコードの戻りクラスを作成することもできます。 例えば:
404エラーは最も一般的なHTTPエラーであるため、これらのエラーを処理する簡単な方法があります。
Http404例外
- class django.http.Http404
HttpResponseNotFound などのエラーを返す場合は、結果のエラーページのHTMLを定義する必要があります。
便宜上、またサイト全体で一貫した404エラーページを用意することをお勧めするため、DjangoはHttp404
例外を提供します。 ビュー関数の任意の時点でHttp404
を上げると、Djangoはそれをキャッチし、HTTPエラーコード404とともにアプリケーションの標準エラーページを返します。
使用例:
Djangoが404を返したときにカスタマイズされたHTMLを表示するには、404.html
という名前のHTMLテンプレートを作成し、テンプレートツリーの最上位に配置します。 このテンプレートは、:setting: `DEBUG` がFalse
に設定されている場合に提供されます。
:setting: `DEBUG` がTrue
の場合、Http404
にメッセージを送信すると、標準の404デバッグテンプレートに表示されます。 これらのメッセージはデバッグ目的で使用してください。 これらは通常、プロダクション404テンプレートでの使用には適していません。
エラービューのカスタマイズ
DjangoのデフォルトのエラービューはほとんどのWebアプリケーションで十分ですが、カスタム動作が必要な場合は簡単に上書きできます。 以下に示すように、URLconfでハンドラーを指定するだけです(他の場所にハンドラーを設定しても効果はありません)。
page_not_found()ビューは、 handler404 によってオーバーライドされます。
server_error()ビューは、 handler500 によってオーバーライドされます。
permit_denied()ビューは、 handler403 によってオーバーライドされます。
bad_request()ビューは、 handler400 によってオーバーライドされます。
カスタムエラービューのテスト
カスタムエラーハンドラの応答をテストするには、テストビューで適切な例外を発生させます。 例えば: