Utsikt över basen¶
Följande tre klasser tillhandahåller mycket av den funktionalitet som behövs för att skapa Django-vyer. Du kan tänka på dem som föräldrar vyer, som kan användas av sig själva eller ärvas från. De kanske inte tillhandahåller alla funktioner som krävs för projekt, i vilket fall det finns Mixins och generiska klassbaserade vyer.
Många av Djangos inbyggda klassbaserade vyer ärver från andra klassbaserade vyer eller olika mixins. Eftersom denna arvskedja är mycket viktig dokumenteras förfädersklasserna under avsnittets titel Förfäder (MRO). MRO är en akronym för Method Resolution Order.
View¶
- class django.views.generic.base.View¶
Basklassen för vyn. Alla andra klassbaserade vyer ärver från denna basklass. Det är inte strikt en generisk vy och kan därför också importeras från
django.views.Flödesschema för metod
Exempel på 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!")
Exempel urls.py:
from django.urls import path from myapp.views import MyView urlpatterns = [ path("mine/", MyView.as_view(), name="my-view"), ]
Attribut
- http_method_names¶
Listan över HTTP-metodnamn som den här vyn accepterar.
Standard:
["get", "post", "put", "patch", "delete", "head", "options", "trace"]
Metoder
- classmethod as_view(**initkwargs)¶
Returnerar en anropsbar vy som tar emot en begäran och returnerar ett svar:
response = MyView.as_view()(request)
Den returnerade vyn har attributen
view_classochview_initkwargs.När vyn anropas under request/response-cykeln, tilldelar metoden
setup()HttpRequesttill vyns attributrequest, och alla positionella och/eller nyckelordsargument fångade från URL-mönstret till attributenargsrespektivekwargs. Sedan anropasdispatch().Om en subklass av
Viewdefinierar asynkrona (async def) metodhanterare, kommeras_view()att markera den returnerade anropbara funktionen som en coroutine-funktion. EttImproperlyConfiguredundantag kommer att uppstå om både asynkrona (async def) och synkrona (def) hanterare är definierade på en enda view-klass.
- setup(request, *args, **kwargs)¶
Utför initialisering av nyckelvyn före
dispatch().Tilldelar
HttpRequesttill vynsrequest-attribut, och alla positionella och/eller nyckelordsargument fångade från URL-mönstret tillargs- respektivekwargs-attributen.Om du åsidosätter den här metoden måste du anropa
super().
- dispatch(request, *args, **kwargs)¶
View-delen av vyn - den metod som tar emot ett
request-argument plus argument och returnerar ett HTTP-svar.Standardimplementeringen inspekterar HTTP-metoden och försöker delegera till en metod som matchar HTTP-metoden; en
GETkommer att delegeras tillget(), enPOSTtillpost(), och så vidare.Som standard kommer en
HEAD-förfrågan att delegeras tillget(). Om du behöver hanteraHEAD-förfrågningar på ett annat sätt änGET, kan du åsidosättahead()-metoden. Se Stöd för andra HTTP-metoder för ett exempel.
- http_method_not_allowed(request, *args, **kwargs)¶
Om vyn anropades med en HTTP-metod som den inte stöder, anropas den här metoden i stället.
Standardimplementeringen returnerar
HttpResponseNotAllowedmed en lista över tillåtna metoder i klartext.
- options(request, *args, **kwargs)¶
Hanterar svar på förfrågningar om HTTP-verbet OPTIONS. Returnerar ett svar med rubriken
Allowsom innehåller en lista över vyns tillåtna HTTP-metodnamn.Om de andra HTTP-metodhanterarna i klassen är asynkrona (
async def) kommer svaret att paketeras i en coroutine-funktion för användning medawait.
TemplateView¶
- class django.views.generic.base.TemplateView¶
Renderar en given mall med kontexten som innehåller parametrar som fångas upp i URL:en.
Ancestors (MRO)
Denna vy ärver metoder och attribut från följande vyer:
Flödesschema för metod
Exempel på 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
Exempel urls.py:
from django.urls import path from myapp.views import HomePageView urlpatterns = [ path("", HomePageView.as_view(), name="home"), ]
Kontext
Fylls på (genom
ContextMixin) med nyckelordsargumenten som fångats från URL-mönstret som serverade vyn.Du kan också lägga till kontext med hjälp av
extra_contextnyckelordsargument föras_view().
RedirectView¶
- class django.views.generic.base.RedirectView¶
Omdirigeringar till en viss URL.
Den angivna URL:en kan innehålla strängformatering i ordboksstil, som interpoleras mot de parametrar som fångas upp i URL:en. Eftersom nyckelordsinterpolering alltid görs (även om inga argument skickas in), måste alla
"%"-tecken i webbadressen skrivas som"%%"så att Python konverterar dem till ett enda procenttecken vid utmatning.Om den angivna URL:en är
Nonekommer Django att returnera enHttpResponseGone(410).Ancestors (MRO)
Denna vy ärver metoder och attribut från följande vy:
Flödesschema för metod
Exempel på 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)
Exempel 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", ), ]
Attribut
- url¶
URL:en som ska omdirigeras till, som en sträng. Eller
Noneför att skapa ett 410 (Gone) HTTP-fel.
- pattern_name¶
Namnet på det URL-mönster som ska omdirigeras till. Omdirigeringen görs med samma args och kwargs som skickas in för den här vyn.
- permanent¶
Om omdirigeringen ska vara permanent. Den enda skillnaden här är den HTTP-statuskod som returneras. Om
Trueanvänds statuskod 301 för omdirigeringen. OmFalseanvänds statuskod 302 för omdirigeringen. Som standard ärpermanentFalse.
- query_string¶
Om GET-frågesträngen ska skickas vidare till den nya platsen. Om
True, läggs frågesträngen till i URL:en. OmFalse, kasseras frågesträngen. Som standard ärquery_stringFalse.
Metoder
- get_redirect_url(*args, **kwargs)¶
Skapar mål-URL:en för omdirigering.
Argumenten
argsochkwargsär positions- respektive nyckelordsargument :ref:` som hämtats från URL-mönstret <how-django-processes-a-request>`.Standardimplementeringen använder
urlsom en startsträng och expanderar%namngivna parametrar i den strängen med hjälp av de namngivna grupper som fångas upp i URL:en.Om
urlinte anges försökerget_redirect_url()att vändapattern_namemed hjälp av det som fångades upp i URL:en (både namngivna och icke namngivna grupper används).Om det begärs av
query_string, kommer den också att lägga till frågesträngen till den genererade URL:en. Underklasser kan implementera vilket beteende de vill, så länge som metoden returnerar en URL-sträng som är redo för omdirigering.