ベースビュー
次の3つのクラスは、Djangoビューを作成するために必要な機能の多くを提供します。 それらを親ビューと考えることができます。これらのビューは、単独で使用することも、継承することもできます。 プロジェクトに必要なすべての機能を提供できるとは限りません。その場合、MixinとGenericクラスベースのビューがあります。
Djangoの組み込みのクラスベースのビューの多くは、他のクラスベースのビューまたはさまざまなミックスインを継承しています。 この継承チェーンは非常に重要であるため、祖先クラスは祖先(MRO)というセクションタイトルで文書化されています。 MROは、Method ResolutionOrderの頭字語です。
View
- class django.views.generic.base.View
マスタークラスベースのベースビュー。 他のすべてのクラスベースのビューは、この基本クラスを継承します。 これは厳密には一般的なビューではないため、
django.views
からインポートすることもできます。メソッドフローチャート
サンプル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!')
例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()が呼び出されます。
- setup(request, *args, **kwargs)
バージョン2.2の新機能。
dispatch()の前に、ビューインスタンス属性
self.request
、self.args
、およびself.kwargs
を初期化します。このメソッドをオーバーライドすると、ミックスインは子クラスで再利用するためにインスタンス属性を設定できます。 このメソッドをオーバーライドするときは、
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)
OPTIONSHTTP動詞の要求への応答を処理します。 ビューで許可されているHTTPメソッド名のリストを含む
Allow
ヘッダーを含む応答を返します。
TemplateView
- class django.views.generic.base.TemplateView
URLにキャプチャされたパラメータを含むコンテキストを使用して、指定されたテンプレートをレンダリングします。
祖先(MRO)
このビューは、次のビューからメソッドと属性を継承します。
メソッドフローチャート
サンプル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
例urls.py :
from django.urls import path from myapp.views import HomePageView urlpatterns = [ path('', HomePageView.as_view(), name='home'), ]
環境
ビューを提供したURLパターンからキャプチャされたキーワード引数が( ContextMixin を介して)入力されます。
as_view()の extra_context キーワード引数を使用してコンテキストを追加することもできます。
RedirectView
- class django.views.generic.base.RedirectView
指定されたURLにリダイレクトします。
指定されたURLには、URLにキャプチャされたパラメータに対して補間される辞書スタイルの文字列フォーマットが含まれている場合があります。 キーワード補間は常に実行されるため(引数が渡されない場合でも)、Pythonが変換するようにURLの
"%"
文字は"%%"
と記述する必要があります。 1パーセントのサインオン出力。指定されたURLが
None
の場合、DjangoはHttpResponseGone
(410)を返します。祖先(MRO)
このビューは、次のビューからメソッドと属性を継承します。
メソッドフローチャート
サンプル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)
例urls.py :
from django.urls import path from django.views.generic.base import RedirectView from article.views import ArticleCounterRedirectView, ArticleDetail urlpatterns = [ path('counter/<int:pk>/', ArticleCounterRedirectView.as_view(), name='article-counter'), path('details/<int:pk>/', ArticleDetail.as_view(), name='article-detail'), path('go-to-django/', RedirectView.as_view(url='https://djangoproject.com'), name='go-to-django'), ]
属性
- url
文字列としてリダイレクトするURL。 または、
None
を使用して、410(Gone)HTTPエラーを発生させます。
- pattern_name
リダイレクト先のURLパターンの名前。 反転は、このビューに渡されたものと同じ引数と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文字列を返す限り、任意の動作を実装できます。