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.
Many of Django’s built-in class-based views inherit from other class-based views or various mixins. Because this inheritance chain is very important, the ancestor classes are documented under the section title of Ancestors (MRO). MRO is an acronym for Method Resolution Order.
La principale vue basée sur des classes. Toutes les autres héritent de cette classe de base.
Index des méthodes
Exemple de fichier views.py:
from django.http import HttpResponse
from django.views.generic import View
class MyView(View):
def get(self, request, *args, **kwargs):
return HttpResponse('Hello, World!')
Exemple de fichier urls.py:
from django.conf.urls import patterns, url
from myapp.views import MyView
urlpatterns = patterns('',
url(r'^mine/$', MyView.as_view(), name='my-view'),
)
Attributs
La liste des noms de méthodes HTTP que cette vue accepte.
Valeur par défaut :
['get', 'post', 'put', 'delete', 'head', 'options', 'trace']
Méthodes
Renvoie une vue exécutable acceptant une requête et renvoyant une réponse :
response = MyView.as_view()(request)
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 Supporting other HTTP methods.
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.
Traite la réponse aux requêtes du verbe HTTP OPTIONS. Renvoie une liste des noms de méthodes HTTP autorisées pour la vue.
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(HomePageView, self).get_context_data(**kwargs)
context['latest_articles'] = Article.objects.all()[:5]
return context
Exemple de fichier urls.py:
from django.conf.urls import patterns, url
from myapp.views import HomePageView
urlpatterns = patterns('',
url(r'^$', HomePageView.as_view(), name='home'),
)
Contexte
Redirection vers l’URL donnée
The given URL may contain dictionary-style string formatting, which will be interpolated against the parameters captured in the URL. Because keyword interpolation is always done (even if no arguments are passed in), any "%" characters in the URL must be written as "%%" so that Python will convert them to a single percent sign on output.
If the given URL is None, Django will return an HttpResponseGone (410).
Ancêtres (MRO)
This view inherits methods and attributes from the following view:
Index des méthodes
Exemple de fichier views.py:
from django.core.urlresolvers import reverse
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
def get_redirect_url(self, pk):
article = get_object_or_404(Article, pk=pk)
article.update_counter()
return reverse('product_detail', args=(pk,))
Exemple de fichier urls.py:
from django.conf.urls import patterns, url
from django.views.generic.base import RedirectView
from article.views import ArticleCounterRedirectView
urlpatterns = patterns('',
url(r'^(?P<pk>\d+)/$', ArticleCounterRedirectView.as_view(), name='article-counter'),
url(r'^go-to-django/$', RedirectView.as_view(url='http://djangoproject.com'), name='go-to-django'),
)
Attributs
The URL to redirect to, as a string. Or None to raise a 410 (Gone) HTTP error.
Whether the redirect should be permanent. The only difference here is the HTTP status code returned. If True, then the redirect will use status code 301. If False, then the redirect will use status code 302. By default, permanent is True.
Whether to pass along the GET query string to the new location. If True, then the query string is appended to the URL. If False, then the query string is discarded. By default, query_string is False.
Méthodes
Constructs the target URL for redirection.
The default implementation uses url as a starting string, performs expansion of % parameters in that string, as well as the appending of query string if requested by query_string. Subclasses may implement any behavior they wish, as long as the method returns a redirect-ready URL string.
Jan 13, 2016