---
title: "Utsikt över basen"
version: 6.1
locale: sv
source: https://docs.djangoproject.com/sv/6.1/ref/class-based-views/base/
canonical: https://djangodocs.dev/sv/6.1/ref/class-based-views/base/
---
# 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()`](#django.views.generic.base.View.setup)
2. [`dispatch()`](#django.views.generic.base.View.dispatch)
3. [`http_method_not_allowed()`](#django.views.generic.base.View.http_method_not_allowed)
4. [`options()`](#django.views.generic.base.View.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()`](#django.views.generic.base.View.setup) [`HttpRequest`](/sv/6.1/ref/request-response/#django.http.HttpRequest) till vyns attribut `request`, och alla positionella och/eller nyckelordsargument [fångade från URL-mönstret](/sv/6.1/topics/http/urls/#how-django-processes-a-request) till attributen `args` respektive `kwargs`. Sedan anropas [`dispatch()`](#django.views.generic.base.View.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()`](#django.views.generic.base.View.dispatch).

Tilldelar [`HttpRequest`](/sv/6.1/ref/request-response/#django.http.HttpRequest) till vyns `request`-attribut, och alla positionella och/eller nyckelordsargument [fångade från URL-mönstret](/sv/6.1/topics/http/urls/#how-django-processes-a-request) 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](/sv/6.1/topics/class-based-views/#supporting-other-http-methods) 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.

The default implementation returns `HttpResponseNotAllowed` with the
list of allowed methods in the `Allow` header, as required by
[**RFC 7231**](https://datatracker.ietf.org/doc/html/rfc7231.html#section-6.5.5). The response body is empty.

#### `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`](/sv/6.1/ref/class-based-views/mixins-simple/#django.views.generic.base.TemplateResponseMixin)
- [`django.views.generic.base.ContextMixin`](/sv/6.1/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin)
- [`django.views.generic.base.View`](#django.views.generic.base.View)

**Flödesschema för metod**

1. [`setup()`](#django.views.generic.base.View.setup)
2. [`dispatch()`](#django.views.generic.base.View.dispatch)
3. [`http_method_not_allowed()`](#django.views.generic.base.View.http_method_not_allowed)
4. [`get_context_data()`](/sv/6.1/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin.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`](/sv/6.1/ref/class-based-views/mixins-simple/#django.views.generic.base.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`](/sv/6.1/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin.extra_context) nyckelordsargument för [`as_view()`](#django.views.generic.base.View.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`](#django.views.generic.base.View)

**Flödesschema för metod**

1. [`setup()`](#django.views.generic.base.View.setup)
2. [`dispatch()`](#django.views.generic.base.View.dispatch)
3. [`http_method_not_allowed()`](#django.views.generic.base.View.http_method_not_allowed)
4. [`get_redirect_url()`](#django.views.generic.base.RedirectView.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`.

#### `preserve_request`

> **New in Django 6.1**

Whether to preserve the HTTP method and body during the redirect. If
`True`, then the redirect will use status code 307 instead of 302,
or 308 instead of 301 when [`permanent`](#django.views.generic.base.RedirectView.permanent) is `True`. By default,
`preserve_request` is `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`](#django.views.generic.base.RedirectView.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`](#django.views.generic.base.RedirectView.url) inte anges försöker `get_redirect_url()` att vända [`pattern_name`](#django.views.generic.base.RedirectView.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`](#django.views.generic.base.RedirectView.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.
