基本ビュー—Djangoドキュメント

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

ベースビュー

次の3つのクラスは、Djangoビューを作成するために必要な機能の多くを提供します。 それらをビューと考えることができます。これらのビューは、単独で使用することも、継承することもできます。 プロジェクトに必要なすべての機能を提供できるとは限りません。その場合、MixinとGenericクラスベースのビューがあります。

Djangoの組み込みのクラスベースのビューの多くは、他のクラスベースのビューまたはさまざまなミックスインを継承しています。 この継承チェーンは非常に重要であるため、祖先クラスは祖先(MRO)というセクションタイトルで文書化されています。 MROは、Method ResolutionOrderの頭字語です。

View

class django.views.generic.base.View

マスタークラスベースのベースビュー。 他のすべてのクラスベースのビューは、この基本クラスを継承します。 これは厳密には一般的なビューではないため、django.viewsからインポートすることもできます。

メソッドフローチャート

  1. setup()

  2. dispatch()

  3. http_method_not_allowed()

  4. options()

サンプル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)

dispatch()の前にキービューの初期化を実行します。

このメソッドをオーバーライドする場合は、super()を呼び出す必要があります。

dispatch(request, *args, **kwargs)

ビューのview部分– request引数と引数を受け入れ、HTTP応答を返すメソッド。

デフォルトの実装では、HTTPメソッドを検査し、HTTPメソッドに一致するメソッドに委任しようとします。 GETget()に委任され、POSTpost()に委任されます。

デフォルトでは、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)

このビューは、次のビューからメソッドと属性を継承します。

メソッドフローチャート

  1. setup()

  2. dispatch()

  3. http_method_not_allowed()

  4. get_context_data()

サンプル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)

このビューは、次のビューからメソッドと属性を継承します。

メソッドフローチャート

  1. setup()

  2. dispatch()

  3. http_method_not_allowed()

  4. get_redirect_url()

サンプル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, 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。 または、Noneを使用して、410(Gone)HTTPエラーを発生させます。

pattern_name

リダイレクト先のURLパターンの名前。 反転は、このビューに渡されたものと同じ引数とkwargsを使用して実行されます。

permanent

リダイレクトを永続的にするかどうか。 ここでの唯一の違いは、返されるHTTPステータスコードです。 Trueの場合、リダイレクトはステータスコード301を使用します。 Falseの場合、リダイレクトはステータスコード302を使用します。 デフォルトでは、permanentFalseです。

query_string

GETクエリ文字列を新しい場所に渡すかどうか。 Trueの場合、クエリ文字列がURLに追加されます。 Falseの場合、クエリ文字列は破棄されます。 デフォルトでは、query_stringFalseです。

メソッド

get_redirect_url(*args, **kwargs)

リダイレクトのターゲットURLを作成します。

argsおよびkwargs引数は、それぞれURLパターンからキャプチャされた位置引数および/またはキーワード引数です。

デフォルトの実装では、開始文字列として url を使用し、URLにキャプチャされた名前付きグループを使用して、その文字列内の%名前付きパラメーターの展開を実行します。

url が設定されていない場合、get_redirect_url()は、URLにキャプチャされたものを使用して pattern_name を逆にしようとします(名前付きグループと名前なしグループの両方が使用されます)。

query_string によって要求された場合、生成されたURLにクエリ文字列も追加されます。 サブクラスは、メソッドがリダイレクト可能なURL文字列を返す限り、任意の動作を実装できます。