組み込みビュー—Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.2.x/ref/views
移動先:案内検索

ビルトインビュー

Djangoの組み込みビューのいくつかは、書き込みビューおよびドキュメントの他の場所に記載されています。

開発中のファイルの提供

static.serve(request, path, document_root, show_indexes=False)

プロジェクトの静的アセット以外に、便宜上、ローカル開発でDjangoを提供してもらいたいファイルがある場合があります。 serve()ビューは、指定した任意のディレクトリにサービスを提供するために使用できます。 (このビューは、本番用に強化されたではなくであり、開発支援としてのみ使用する必要があります。実際のフロントエンドWebサーバーを使用して本番環境でこれらのファイルを提供する必要があります)。

最も可能性の高い例は、:setting: `MEDIA_ROOT` にユーザーがアップロードしたコンテンツです。 django.contrib.staticfilesは静的アセットを対象としており、ユーザーがアップロードしたファイルの処理は組み込まれていませんが、次のようなものを追加することで、Djangoに:setting: `MEDIA_ROOT` を提供させることができます。 URLconf:

from django.conf import settings
from django.urls import re_path
from django.views.static import serve

# ... the rest of your URLconf goes here ...

if settings.DEBUG:
    urlpatterns += [
        re_path(r'^media/(?P<path>.*)$', serve, {
            'document_root': settings.MEDIA_ROOT,
        }),
    ]

スニペットは、:setting: `MEDIA_URL` の値が'/media/'であることを前提としていることに注意してください。 これにより、 serve()ビューが呼び出され、URLconfからのパスと(必須の)document_rootパラメーターが渡されます。

このURLパターンを定義するのは少し面倒になる可能性があるため、Djangoには:setting: `MEDIA_URL` などのプレフィックスをパラメーターとして受け取る小さなURLヘルパー関数 static()が付属しています。 'django.views.static.serve'などのビューへの点線のパス。 その他の関数パラメーターは、透過的にビューに渡されます。


エラービュー

Djangoには、HTTPエラーを処理するためのいくつかのビューがデフォルトで付属しています。 これらを独自のカスタムビューでオーバーライドするには、エラービューのカスタマイズを参照してください。

404(ページが見つかりません)ビュー

defaults.page_not_found(request, exception, template_name='404.html')

ビュー内から Http404 を上げると、Djangoは404エラーの処理専用の特別なビューをロードします。 デフォルトでは、ビュー django.views.defaults.page_not_found()であり、「見つかりません」というメッセージを生成するか、ルートで作成した場合はテンプレート404.htmlを読み込んでレンダリングします。テンプレートディレクトリ。

デフォルトの404ビューは、エラーの原因となったURLであるrequest_pathと、ビューをトリガーした例外の便利な表現であるexceptionの2つの変数をテンプレートに渡します(例えば 特定のHttp404インスタンスに渡されたメッセージを含みます)。

404ビューについて注意すべき3つのこと:

  • 404ビューは、URLconf内のすべての正規表現をチェックした後、Djangoが一致するものを見つけられなかった場合にも呼び出されます。
  • 404ビューには RequestContext が渡され、テンプレートコンテキストプロセッサによって提供される変数にアクセスできます(例: MEDIA_URL)。
  • :setting: `DEBUG`True(設定モジュール内)に設定されている場合、404ビューは使用されず、代わりにURLconfが表示され、デバッグ情報が表示されます。 。


500(サーバーエラー)ビュー

defaults.server_error(request, template_name='500.html')

同様に、Djangoは、ビューコードでランタイムエラーが発生した場合に特殊なケースの動作を実行します。 ビューで例外が発生した場合、Djangoはデフォルトでビューdjango.views.defaults.server_errorを呼び出します。これにより、「サーバーエラー」メッセージが生成されるか、テンプレートをロードしてレンダリングします500.htmlルートテンプレートディレクトリ。

デフォルトの500ビューは、500.htmlテンプレートに変数を渡さず、追加のエラーの可能性を減らすために空のContextでレンダリングされます。

:setting: `DEBUG`True(設定モジュール内)に設定されている場合、500ビューは使用されず、代わりにトレースバックが表示され、デバッグ情報が表示されます。 。


403(HTTP Forbidden)ビュー

defaults.permission_denied(request, exception, template_name='403.html')

404および500ビューと同じように、Djangoには403Forbiddenエラーを処理するビューがあります。 ビューで403例外が発生した場合、Djangoはデフォルトでビューdjango.views.defaults.permission_deniedを呼び出します。

このビューは、ルートテンプレートディレクトリにテンプレート403.htmlをロードしてレンダリングします。このファイルが存在しない場合は、 RFC 7231#に従って、代わりに「403Forbidden」というテキストを提供します。セクション-6.5.3 (HTTP 1.1仕様)。 テンプレートコンテキストには、exceptionが含まれています。これは、ビューをトリガーした例外の文字列表現です。

django.views.defaults.permission_deniedは、 PermissionDenied 例外によってトリガーされます。 ビューでのアクセスを拒否するには、次のようなコードを使用できます。

from django.core.exceptions import PermissionDenied

def edit(request, pk):
    if not request.user.is_staff:
        raise PermissionDenied
    # ...

400(悪いリクエスト)ビュー

defaults.bad_request(request, exception, template_name='400.html')

SuspiciousOperation がDjangoで発生した場合、Djangoのコンポーネントによって処理される可能性があります(たとえば、セッションデータのリセット)。 特に処理されていない場合、Djangoはサーバーエラーではなく現在のリクエストを「不正なリクエスト」と見なします。

django.views.defaults.bad_requestは、それ以外はserver_errorビューと非常に似ていますが、エラー状態がクライアント操作の結果であることを示すステータスコード400で返されます。 デフォルトでは、ビューをトリガーした例外に関連するものは何もテンプレートコンテキストに渡されません。これは、例外メッセージにファイルシステムパスなどの機密情報が含まれている可能性があるためです。

bad_requestビューは、:setting: `DEBUG`Falseの場合にのみ使用されます。