---
title: "Vues de base"
version: 2.2
locale: fr
source: https://docs.djangoproject.com/fr/2.2/ref/class-based-views/base/
canonical: https://djangodocs.dev/fr/2.2/ref/class-based-views/base/
---
# Vues de base

Les trois classes suivantes fournissent la plupart des fonctionnalités nécessaires à la création de vues Django. Vous pouvez les considérer comme des vues *parentes* qui peuvent être utilisées telles quelles ou comme classe parente. Elles ne contiennent pas toutes les fonctionnalités requises par les projets, c’est pour cela qu’il y a des vues basées sur des classes de type `Mixin` et d’autres génériques.

La plupart des vues fondées sur les classes intégrées à Django héritent d’autres vues fondées sur les classes ou de différentes classes mixin. En raison de l’importance de cette chaîne d’héritage, les classes parentes sont documentées sous la section **Ancêtres (MRO)**. MRO est un acronyme pour Method Resolution Order (ordre de résolution des méthodes).

## `View`

#### `class django.views.generic.base.View`

La principale vue basée sur des classes. Toutes les autres héritent de cette classe de base. Il ne s’agit pas strictement d’une vue générique et elle peut donc être importée à partir de `django.views`.

**Index des méthodes**

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)

**Exemple de fichier 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!')
```

**Exemple de fichier urls.py**:

```
from django.urls import path

from myapp.views import MyView

urlpatterns = [
    path('mine/', MyView.as_view(), name='my-view'),
]
```

**Attributs**

#### `http_method_names`

La liste des noms de méthodes HTTP que cette vue accepte.

Valeur par défaut :

```
['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
```

**Méthodes**

#### `classmethod as_view(**initkwargs)`

Renvoie une vue exécutable acceptant une requête et renvoyant une réponse :

```
response = MyView.as_view()(request)
```

La vue renvoyée possède les attributs `view_class` et `view_initkwargs`.

Lorsque la vue est appelée pendant le cycle requête/réponse, la méthode [`setup()`](#django.views.generic.base.View.setup) définit l’attribut `request` de la vue à l’objet [`HttpRequest`](/fr/2.2/ref/request-response/#django.http.HttpRequest), ainsi que tout paramètre positionnel ou nommé [capturé à partir du motif d’URL](/fr/2.2/topics/http/urls/#how-django-processes-a-request) aux attributs `args` et `kwargs` de la vue. Puis, [`dispatch()`](#django.views.generic.base.View.dispatch) est appelée.

#### `setup(request, *args, **kwargs)`

> **New in Django 2.2**

Initialise les attributs de l’instance de vue : `self.request`, `self.args` et `self.kwargs` avant d’appeler [`dispatch()`](#django.views.generic.base.View.dispatch).

La surcharge de cette méthode permet aux classes mixins de configurer les attributs de l’instance qui seront réutilisés dans les classes enfants. Quand vous surchargez cette méthode, n’oubliez pas d’appeler `super()`.

#### `dispatch(request, *args, **kwargs)`

La partie `view` de la vue, la méthode qui accepte un paramètre `request` ainsi que d’autres paramètres et qui renvoie une réponse HTTP.

L’implémentation par défaut examine la méthode HTTP et essaie de déléguer l’exécution à une méthode qui correspond à la méthode HTTP ; une requête `GET` sera déléguée à `get()`, une requête `POST` à `post()`, et ainsi de suite.

Par défaut, une requête `HEAD` sera déléguée à `get()`. Si vous avez besoin de traiter différemment les requêtes `HEAD`, vous pouvez surcharger la méthode `head()`. Voir l’exemple dans [Prise en charge de méthodes HTTP alternatives](/fr/2.2/topics/class-based-views/#supporting-other-http-methods).

#### `http_method_not_allowed(request, *args, **kwargs)`

Si la vue a été appelée par une méthode HTTP qu’elle ne prend pas en charge, c’est cette méthode qui sera appelée.

L’implémentation par défaut renvoie `HttpResponseNotAllowed` avec une liste de méthodes autorisées en texte brut.

#### `options(request, *args, **kwargs)`

Traite la réponse aux requêtes du verbe HTTP OPTIONS. Renvoie une réponse avec l’en-tête `Allow` contenant une liste des noms de méthodes HTTP autorisées pour la vue.

## `TemplateView`

#### `class django.views.generic.base.TemplateView`

Effectue le rendu d’un gabarit donné, avec le contexte contenant les paramètres capturés dans l’URL.

**Ancêtres (MRO)**

Cette vue hérite des méthodes et des attributs des vues suivantes :

- [`django.views.generic.base.TemplateResponseMixin`](/fr/2.2/ref/class-based-views/mixins-simple/#django.views.generic.base.TemplateResponseMixin)
- [`django.views.generic.base.ContextMixin`](/fr/2.2/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin)
- [`django.views.generic.base.View`](#django.views.generic.base.View)

**Index des méthodes**

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()`](/fr/2.2/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin.get_context_data)

**Exemple de fichier 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
```

**Exemple de fichier urls.py**:

```
from django.urls import path

from myapp.views import HomePageView

urlpatterns = [
    path('', HomePageView.as_view(), name='home'),
]
```

**Contexte**

- Complété (via [`ContextMixin`](/fr/2.2/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin)) par les paramètres nommés capturés par le motif d’URL qui a servi à appeler la vue.
- Il est aussi possible d’ajouter du contexte en utilisant le paramètre nommé [`extra_context`](/fr/2.2/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin.extra_context) de [`as_view()`](#django.views.generic.base.View.as_view).

## `RedirectView`

#### `class django.views.generic.base.RedirectView`

Redirection vers l’URL donnée.

L’URL donnée peut contenir des chaînes de format de type dictionnaire, qui seront interpolées par les paramètres capturés dans l’URL. Comme l’interpolation par mot-clé a *toujours* lieu (même si aucun paramètre n’est capturé), tout caractère `"%"` dans l’URL doit être doublé (`"%%"`) de sorte que Python convertit ces séquences en caractère pourcent unique lors de l’affichage.

Si l’URL indiquée vaut `None`, Django renvoie une réponse `HttpResponseGone` (410).

**Ancêtres (MRO)**

Cette vue hérite des méthodes et des attributs de la vue suivante :

- [`django.views.generic.base.View`](#django.views.generic.base.View)

**Index des méthodes**

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)

**Exemple de fichier 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)
```

**Exemple de fichier urls.py**:

```
from django.urls import path
from django.views.generic.base import RedirectView

from article.views import ArticleCounterRedirectView, ArticleDetail

urlpatterns = [
    path('counter/<int:pk>/', ArticleCounterRedirectView.as_view(), name='article-counter'),
    path('details/<int:pk>/', ArticleDetail.as_view(), name='article-detail'),
    path('go-to-django/', RedirectView.as_view(url='https://djangoproject.com'), name='go-to-django'),
]
```

**Attributs**

#### `url`

L’URL vers laquelle rediriger, sous forme textuelle. Ou `None` pour générer une erreur HTTP 410 (Gone).

#### `pattern_name`

Le nom du motif d’URL vers lequel rediriger. La résolution inverse est effectuée à l’aide des mêmes paramètres positionnels et nommés (args/kwargs) que ceux transmis à cette vue.

#### `permanent`

Indique si la redirection doit être permanente. La seule différence est le code de statut HTTP qui est renvoyé. Si `True`, la redirection produit un code de statut 301. Si `False`, la redirection produit un code de statut 302. Par défaut, `permanent` vaut `False`.

#### `query_string`

Indique s’il faut transférer la chaîne de requête GET vers le nouvel emplacement. Si `True`, la chaîne de requête est ajoutée à l’URL. Si `False`, la chaîne de requête n’est pas considérée. Par défaut, `query_string` vaut `False`.

**Méthodes**

#### `get_redirect_url(*args, **kwargs)`

Construit l’URL cible de la redirection.

L’implémentation par défaut utilise [`url`](#django.views.generic.base.RedirectView.url) comme chaîne de départ et effectue la substitution des paramètres nommés `%` dans cette chaîne en utilisant les groupes nommés capturés dans l’URL.

Si [`url`](#django.views.generic.base.RedirectView.url) n’est pas défini, `get_redirect_url()` essaie de résoudre [`pattern_name`](#django.views.generic.base.RedirectView.pattern_name) en utilisant les éléments capturés dans l’URL (aussi bien les groupes nommés qu’anonymes).

Si la requête contenait une chaîne de paramètres [`query_string`](#django.views.generic.base.RedirectView.query_string), celle-ci est aussi ajoutée à l’URL générée. Les sous-classes peuvent implémenter le comportement qu’elles souhaitent pour autant que la méthode renvoie une chaîne d’URL prête pour la redirection.
