# Django 5.2.8 documentation

# 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

  1. `setup()`

  2. `dispatch()`

  3. `http_method_not_allowed()`

  4. `options()`

  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` och `view_initkwargs`.

    När vyn anropas under request/response-cykeln, tilldelar metoden `setup()` `HttpRequest` till vyns attribut `request`, och alla positionella och/eller nyckelordsargument fångade från URL-mönstret till attributen `args` respektive `kwargs`. Sedan anropas `dispatch()`.

    Om en subklass av `View` definierar asynkrona (`async def`) metodhanterare, kommer `as_view()` att markera den returnerade anropbara funktionen som en coroutine-funktion. Ett `ImproperlyConfigured` 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 vyns `request`-attribut, och alla positionella och/eller nyckelordsargument fångade från URL-mönstret till `args`- respektive `kwargs`-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 till `get()`, en `POST` till `post()`, och så vidare.

    Som standard kommer en `HEAD`-förfrågan att delegeras till `get()`. Om du behöver hantera `HEAD`-förfrågningar på ett annat sätt än `GET`, kan du åsidosätta `head()`-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 med `await`.

## `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:

  - `django.views.generic.base.TemplateResponseMixin`

  - `django.views.generic.base.ContextMixin`

  - `django.views.generic.base.View`

  Flödesschema för metod

  1. `setup()`

  2. `dispatch()`

  3. `http_method_not_allowed()`

  4. `get_context_data()`

  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ör `as_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 en `HttpResponseGone` (410).

  Ancestors (MRO)

  Denna vy ärver metoder och attribut från följande vy:

  - `django.views.generic.base.View`

  Flödesschema för metod

  1. `setup()`

  2. `dispatch()`

  3. `http_method_not_allowed()`

  4. `get_redirect_url()`

  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. Om `False` används statuskod 302 för omdirigeringen. Som standard är `permanent` `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. Om `False`, kasseras frågesträngen. Som standard är `query_string` `False`.

  Metoder

  get_redirect_url(*args, **kwargs)

    Skapar mål-URL:en för omdirigering.

    Argumenten `args` och `kwargs` ä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öker `get_redirect_url()` att vända `pattern_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.