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 classe de vue de base. 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
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.Si une sous-classe de
View
définit des gestionnaires de méthodes asynchrones (async def
),as_view()
marquera la fonction renvoyée comme fonction coroutine. Une exceptionImproperlyConfigured
sera produite si des gestionnaires de la mĂȘme classe de vue sont dĂ©finis Ă la fois comme asynchrone (async def
) et synchrone (def
).
- 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.SI les autres gestionnaires de méthode HTTP de la classe sont asynchrones (
async def
), la réponse sera enveloppée dans une fonction coroutine utilisable avecawait
.
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 :
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.