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_class
ochview_initkwargs
.När vyn anropas under request/response-cykeln, tilldelar metoden
setup()
HttpRequest
till vyns attributrequest
, och alla positionella och/eller nyckelordsargument :ref:fångade från URL-mönstret <how-django-processes-a-request>
till attributenargs
respektivekwargs
. Sedan anropasdispatch()
.Om en subklass av
View
definierar asynkrona (async def
) metodhanterare, kommeras_view()
att markera den returnerade anropbara funktionen som en coroutine-funktion. EttImproperlyConfigured
undantag 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
HttpRequest
till 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
GET
kommer att delegeras tillget()
, enPOST
tillpost()
, 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
HttpResponseNotAllowed
med 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
Allow
som 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_context
nyckelordsargument 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
None
kommer 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
None
fö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
True
används statuskod 301 för omdirigeringen. OmFalse
används statuskod 302 för omdirigeringen. Som standard ärpermanent
False
.
- 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_string
False
.
Metoder
- get_redirect_url(*args, **kwargs)¶
Skapar mål-URL:en för omdirigering.
Argumenten
args
ochkwargs
är positions- respektive nyckelordsargument :ref:` som hämtats från URL-mönstret <how-django-processes-a-request>`.Standardimplementeringen använder
url
som 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
url
inte anges försökerget_redirect_url()
att vändapattern_name
med 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.