ベース・ビュー¶
以下の3つのクラスは、Django のビューの作成に必要な多くの機能を提供します。これらは Django ビューの 親の ビューとみなすことができ、それ自体で使うことも継承して使うこともできます。プロジェクトに必要な全ての機能を提供するわけではありませんが、その場合はミックスインとクラスベースのジェネリックビューが使えます。
多くの Django に組み込みのクラスベースビューは、ほかのクラスベースビューや多種のミックスインを継承しています。この継承の連結は非常に重要なため、原型のクラスは 継承元 (MRO) セクションにドキュメントがあります。MRO は メソッド解決順序 (Method Resolution Order) の略です。
View
¶
- class django.views.generic.base.View¶
基本ビュークラス。他の全てのクラスベースのビューはこの基底クラスを継承します。厳密にはジェネリックビューではないので、
django.views
からインポートすることもできます。メソッドのフローチャート
Example views.py:
from django.http import HttpResponse from django.views import View class MyView(View): def get(self, request, *args, **kwargs): return HttpResponse("Hello, World!")
Example urls.py:
from django.urls import path from myapp.views import MyView urlpatterns = [ path("mine/", MyView.as_view(), name="my-view"), ]
属性
- http_method_names¶
このビューが受け入れる HTTP メソッドの名称のリストです。
デフォルト値:
["get", "post", "put", "patch", "delete", "head", "options", "trace"]
メソッド
- classmethod as_view(**initkwargs)¶
リクエストを受け取ってレスポンスを返す、呼び出し可能なビューを返します:
response = MyView.as_view()(request)
返されたビューは、
view_class
とview_initkwargs
属性を持っています。リクエスト/レスポンスサイクル中にビューが呼び出されると、
setup()
メソッドはHttpRequest
をビューのrequest
属性に割り当て、URLパターンからキャプチャされた位置引数および/またはキーワード引数 をそれぞれargs
およびkwargs
属性に割り当てます。その後、dispatch()
が呼び出されます。ビューのサブクラスが非同期 (
async def
) メソッドハンドラを定義している場合、as_view()
は返された呼び出し可能オブジェクトをコルーチン関数としてマークします。非同期ハンドラ (async def
) と同期ハンドラ (def
) の両方が1つのビュークラスで定義されている場合、ImproperlyConfigured
例外が発生します。
- setup(request, *args, **kwargs)¶
dispatch()
の前に、ビューの初期化のための重要な処理を実行します。このメソッドをオーバーライドする場合は、
super()
を呼び出さなければなりません。
- dispatch(request, *args, **kwargs)¶
ビューの
view
部分 --request
引数と引数を受け取り、HTTPレスポンスを返すメソッドです。デフォルトの処理は、HTTP メソッドを調べて、その HTTP メソッドと一致するメソッドに処理を委ねるよう試みます。例えば、
GET
はget()
に、POST
はpost()
に委ねられます。デフォルトでは、
HEAD
リクエストはget()
に委ねられます。HEAD
リクエストをGET
とは違う方法で操作する必要がある場合は、head()
メソッドをオーバーライドできます。例えば その他の HTTP メソッドをサポートする を参照してください。
- http_method_not_allowed(request, *args, **kwargs)¶
ビューがサポートしていない HTTP メソッドで呼び出された場合は、 代わりにこのメソッドが呼び出されます。
プレーンテキストで、有効なメソッドのリストともに、
HttpResponseNotAllowed
を返すデフォルトの処理です。
- options(request, *args, **kwargs)¶
OPTIONS HTTP 動詞のためのリクエストへのレスポンスを操作します。ビューの有効な HTTP メソッド名のリストを含む
Allow
ヘッダーとともにレスポンスを返します。クラスの他のHTTPメソッドハンドラが非同期 (
async def
) である場合、レスポンスはawait
で使用するコルーチン関数にラップされます。
TemplateView
¶
- class django.views.generic.base.TemplateView¶
URL 内でキャプチャされたパラメータを含むコンテキストとともに、与えられたテンプレートをレンダリングします。
継承元 (MRO)
このメソッドは、以下のビューからメソッドと属性を継承しています:
メソッドのフローチャート
Example views.py:
from django.views.generic.base import TemplateView from articles.models import Article class HomePageView(TemplateView): template_name = "home.html" def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["latest_articles"] = Article.objects.all()[:5] return context
Example urls.py:
from django.urls import path from myapp.views import HomePageView urlpatterns = [ path("", HomePageView.as_view(), name="home"), ]
コンテキスト
(
ContextMixin
を通じて) ビューに対応した URL パターンからキャプチャされたキーワード引数とともに入力されます。as_view()
にextra_context
キーワード引数を使用して、コンテキストを追加することもできます。
RedirectView
¶
- class django.views.generic.base.RedirectView¶
与えられた URL にリダイレクトします。
与えられた URL は、辞書形式の文字列フォーマットを含むかもしれず、URL 内でキャプチャされたパラメータに対して追加されます。キーワード追加は (たとえ引数が渡されなくとも) 常に 行われるため、Python がアウトプット上でパーセント文字に変換できるように、URL 内のすべての
"%"
文字は"%%"
と書かれなければなりません。与えられた URL が
None
の場合、DjangoはHttpResponseGone
(410) を返します。継承元 (MRO)
このビューは、以下のビューからメソッドと属性を継承します:
メソッドのフローチャート
Example views.py:
from django.shortcuts import get_object_or_404 from django.views.generic.base import RedirectView from articles.models import Article class ArticleCounterRedirectView(RedirectView): permanent = False query_string = True pattern_name = "article-detail" def get_redirect_url(self, *args, **kwargs): article = get_object_or_404(Article, pk=kwargs["pk"]) article.update_counter() return super().get_redirect_url(*args, **kwargs)
Example urls.py:
from django.urls import path from django.views.generic.base import RedirectView from article.views import ArticleCounterRedirectView, ArticleDetailView urlpatterns = [ path( "counter/<int:pk>/", ArticleCounterRedirectView.as_view(), name="article-counter", ), path("details/<int:pk>/", ArticleDetailView.as_view(), name="article-detail"), path( "go-to-django/", RedirectView.as_view(url="https://www.djangoproject.com/"), name="go-to-django", ), ]
属性
- url¶
リダイレクト先の URL です。もしくは、410 (Gone) HTTP エラーを投げる
None
です。
- pattern_name¶
リダイレクト先の URL パターンの名前です。このビューのために渡されてきたものと同じ args と kwargs を使って逆引きされます。
- permanent¶
リダイレクトがパーマネントかどうかを指定します。ここでの違いは、返される HTTP ステータスコードだけです。
True
の場合、リダイレクトはステータスコード 301 を使います。False
の場合は、ステータスコード 302 を使います。デフォルトでは、permanent
はFalse
です。
- query_string¶
GET クエリ文字列を新しい場所に渡すかどうかを指定します。
True
の場合、クエリ文字列は URL に追加されます。False
の場合、クエリ文字列は破棄されます。 デフォルトでは、query_string
はFalse
です。
メソッド
- get_redirect_url(*args, **kwargs)¶
リダイレクトのために、対象の URL を組み立てます。
args
とkwargs
引数は、それぞれ URL パターン から取得した、位置引数および/またはキーワード引数です。デフォルトの処理は、
url
を最初の文字列として使い、URLでキャプチャされた名前付きグループを使用したその文字列内の名前付き%
パラメータの展開を実行します。url
がセットされていない場合、get_redirect_url()
が URLでキャプチャされたものを使ってpattern_name
を逆引きしようとします (名前あり・名前なしグループの両方が使われます)。query_string
によってリクエストされた場合、生成された URL にクエリ文字列を追加します。サブクラスは、メソッドがリダイレクト準備ができた URL 文字列を返す限り、これらが望むとおりの処理をします。