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
¶ The base view class. All other class-based views inherit from this base class. It isn’t strictly a generic view and thus can also be imported from
django.views
.Index des méthodes
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
etview_initkwargs
.Lorsque la vue est appelée pendant le cycle requête/réponse, la méthode
setup()
définit l’attributrequest
de la vue à l’objetHttpRequest
, ainsi que tout paramètre positionnel ou nommé capturé à partir du motif d’URL aux attributsargs
etkwargs
de la vue. Puis,dispatch()
est appelée.If a
View
subclass defines asynchronous (async def
) method handlers,as_view()
will mark the returned callable as a coroutine function. AnImproperlyConfigured
exception will be raised if both asynchronous (async def
) and synchronous (def
) handlers are defined on a single view-class.Changed in Django 4.1:Compatibility with asynchronous (
async def
) method handlers was added.
-
setup
(request, *args, **kwargs)¶ Effectue l’initialisation des variables principales de la vue avant
dispatch()
.Si 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ètrerequest
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êtePOST
à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êtesHEAD
, vous pouvez surcharger la méthodehead()
. Voir l’exemple dans Prise en charge de méthodes HTTP alternatives.
-
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.If the other HTTP methods handlers on the class are asynchronous (
async def
) then the response will be wrapped in a coroutine function for use withawait
.Changed in Django 4.1:Compatibility with classes defining asynchronous (
async def
) method handlers was added.
-
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
django.views.generic.base.ContextMixin
django.views.generic.base.View
Index des méthodes
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
) 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
deas_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éponseHttpResponseGone
(410).Ancêtres (MRO)
Cette vue hérite des méthodes et des attributs de la vue suivante :
Index des méthodes
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, 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'), ]
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. SiFalse
, la redirection produit un code de statut 302. Par défaut,permanent
vautFalse
.
-
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. SiFalse
, la chaîne de requête n’est pas considérée. Par défaut,query_string
vautFalse
.
Méthodes
-
get_redirect_url
(*args, **kwargs)¶ Construit l’URL cible de la redirection.
Les paramètres
args
etkwargs
sont respectivement les paramètres positionnels et nommés capturés à partir du motif d’URL.L’implémentation par défaut utilise
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
n’est pas défini,get_redirect_url()
essaie de résoudrepattern_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
, 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.
-