Inbyggt API för klassbaserade vyer¶
API-referens för klassbaserade vyer. För introduktionsmaterial, se Klassbaserade åsikter ämnesguide.
Specifikation¶
Varje begäran som hanteras av en klassbaserad vy har ett oberoende tillstånd; därför är det säkert att lagra tillståndsvariabler på instansen (dvs. self.foo = 3
är en trådsäker operation).
En klassbaserad vy distribueras till ett URL-mönster med hjälp av as_view()
klassmetod:
urlpatterns = [
path("view/", MyView.as_view(size=42)),
]
Trådsäkerhet med utsiktsargument
Argument som skickas till en vy delas mellan alla instanser av en vy. Detta innebär att du inte bör använda en lista, en ordbok eller något annat föränderligt objekt som argument till en vy. Om du gör det och det delade objektet ändras, kan de åtgärder som vidtas av en användare som besöker din vy ha en effekt på efterföljande användare som besöker samma vy.
Argument som skickas till as_view()
kommer att tilldelas till den instans som används för att hantera en begäran. Med hjälp av det tidigare exemplet innebär detta att varje begäran på MyView
kan använda self.size
. Argumenten måste motsvara attribut som redan finns i klassen (returnerar True
vid en hasattr
-kontroll).
Bas vs generiska vyer¶
Basklassbaserade vyer kan betraktas som *föräldra*vyer som kan användas själva eller ärvas från. De kanske inte ger alla de funktioner som krävs för projekt, och i så fall finns det mixins som utökar vad basvyer kan göra.
Djangos generiska vyer är uppbyggda av dessa basvyer och utvecklades som en genväg för vanliga användningsmönster som att visa detaljerna för ett objekt. De tar vissa vanliga idiom och mönster som finns i vyutveckling och abstraherar dem så att du snabbt kan skriva vanliga vyer av data utan att behöva upprepa dig själv.
De flesta generiska vyer kräver nyckeln queryset
, som är en QuerySet
-instans; se Göra förfrågningar för mer information om QuerySet
-objekt.