Base views¶
以下の3つのクラスは、Django のビューの作成に必要な多くの機能を提供します。これらは Django ビューの 親の ビューと見なすことができ、それ自体で使うことも継承して使うこともできます。プロジェクトに必要な全ての機能を提供するわけではありませんが、その場合は Mixins と汎用クラスベースビューが使えます。
多くの Django のビルトインのクラスベースビューは、ほかのクラスベースビューや多種の mixin を継承しています。この継承チェーンは非常に重要なため、原型のクラスは 継承元 (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属性を持っています。When the view is called during the request/response cycle, the
setup()method assigns theHttpRequestto the view'srequestattribute, and any positional and/or keyword arguments captured from the URL pattern to theargsandkwargsattributes, respectively. Thendispatch()is called.
-
setup(request, *args, **kwargs)¶ Performs key view initialization prior to
dispatch().If overriding this method, you must call
super().
-
dispatch(request, *args, **kwargs)¶ The
viewpart of the view -- the method that accepts arequestargument plus arguments, and returns an HTTP response.デフォルトの処理は、HTTP メソッドを調べて、その HTTP メソッドと一致するメソッドに処理を委ねるよう試みます; 例えば、
GETはget()に、POSTはpost()に委ねられます。デフォルトでは、
HEADリクエストはget()に委ねられます。HEADリクエストをGETとは違う方法で操作する必要がある場合は、head()メソッドをオーバーライドすることができます。例えば その他の HTTP メソッドをサポートする をご覧ください。
-
http_method_not_allowed(request, *args, **kwargs)¶ If the view was called with an HTTP method it doesn't support, this method is called instead.
プレーンテキストで、有効なメソッドのリストともに、
HttpResponseNotAllowedを返すデフォルトの処理です。
-
options(request, *args, **kwargs)¶ OPTIONS HTTP 動詞のためのリクエストへのレスポンスを操作します。ビューの有効な HTTP メソッド名のリストを含む
Allowヘッダーとともにレスポンスを返します。
-
TemplateView¶
- class
django.views.generic.base.TemplateView¶ URL 内でキャプチャされたパラメータを含むコンテキストとともに、与えられたテンプレートをレンダリングします。
継承元 (MRO)
このメソッドは、以下のビューからメソッドと属性を継承しています:
django.views.generic.base.TemplateResponseMixindjango.views.generic.base.ContextMixindjango.views.generic.base.View
メソッドのフローチャート
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 パターンからキャプチャされたキーワード引数とともに入力されます。 - You can also add context using the
extra_contextkeyword argument foras_view().
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 を組み立てます。
The
argsandkwargsarguments are positional and/or keyword arguments captured from the URL pattern, respectively.デフォルトの処理は、
urlを最初の文字列として使い、URLでキャプチャされた名前付きグループを使用したその文字列内の名前付き%パラメータの展開を実行します。urlがセットされていない場合、get_redirect_url()が URLでキャプチャされたものを使ってpattern_nameをリバースしようとします (名前あり・名前なしグループの両方が使われます)。query_stringによってリクエストされた場合、生成された URL にクエリ文字列を追加します。サブクラスは、メソッドがリダイレクト準備ができた URL 文字列を返す限り、これらが望むとおりの処理をします。
-