{"title":"Décorateurs de vue","version":"4.2","locale":"fr","docname":"topics/http/decorators","url":"/fr/4.2/topics/http/decorators/","canonical":"https://djangodocs.dev/fr/4.2/topics/http/decorators/","summary":"Django fournit plusieurs décorateurs afin de permettre aux vues de prendre en charge différentes fonctionnalités HTTP. Voir Décoration de la classe pour savoir…","html":"<span id=\"view-decorators\"></span><h1>Décorateurs de vue<a class=\"heading-anchor\" href=\"#module-django.views.decorators.http\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django fournit plusieurs décorateurs afin de permettre aux vues de prendre en charge différentes fonctionnalités HTTP.</p>\n<p>Voir <a class=\"reference internal\" href=\"/fr/4.2/topics/class-based-views/intro/#id1\"><span class=\"std std-ref\">Décoration de la classe</span></a> pour savoir comment utiliser ces décorateurs avec les vues fondées sur des classes.</p>\n<section id=\"allowed-http-methods\">\n<h2>Méthodes HTTP autorisées<a class=\"heading-anchor\" href=\"#allowed-http-methods\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Les décorateurs présents dans  <a class=\"reference internal\" href=\"#module-django.views.decorators.http\" title=\"django.views.decorators.http\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.views.decorators.http</span></code></a> peuvent être utilisés pour restreindre l’accès à une vue en se basant sur la méthode utilisée lors de la requête. Ces décorateurs renvoient une instance de <a class=\"reference internal\" href=\"/fr/4.2/ref/request-response/#django.http.HttpResponseNotAllowed\" title=\"django.http.HttpResponseNotAllowed\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.http.HttpResponseNotAllowed</span></code></a> si les conditions ne sont pas remplies.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.http.require_http_methods\">\n<span class=\"sig-name descname\"><span class=\"pre\">require_http_methods</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request_method_list</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.http.require_http_methods\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Décorateur exigeant que l’accès à une vue se fasse via certaines méthodes HTTP seulement. Exemple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.decorators.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">require_http_methods</span>\n\n\n<span class=\"nd\">@require_http_methods</span><span class=\"p\">([</span><span class=\"s2\">&quot;GET&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">])</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"c1\"># I can assume now that only GET or POST requests make it this far</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n<p>Remarquez que les noms de méthodes HTTP doivent être en majuscules.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.http.require_GET\">\n<span class=\"sig-name descname\"><span class=\"pre\">require_GET</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.http.require_GET\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Décorateur exigeant que la vue n’accepte que la méthode GET.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.http.require_POST\">\n<span class=\"sig-name descname\"><span class=\"pre\">require_POST</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.http.require_POST\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Décorateur exigeant que la vue n’accepte que la méthode POST.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.http.require_safe\">\n<span class=\"sig-name descname\"><span class=\"pre\">require_safe</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.http.require_safe\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Décorateur exigeant que la vue n’accepte que les méthodes GET et HEAD. Ces méthodes sont généralement considérées « sans risque » car elles ne devraient rien faire d’autre mis à part retourner la ressource demandée.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Les serveurs Web devraient retirer automatiquement le contenu des réponses aux requêtes HEAD en prenant soin de laisser les en-têtes inchangés, vous pouvez ainsi traiter les requêtes HEAD comme des requêtes GET dans vos vues. Étant donné que certains programmes, tels que les vérificateurs d’hyperliens, se basent sur les requêtes HEAD, il peut être préférable d’utiliser <code class=\"docutils literal notranslate\"><span class=\"pre\">require_safe</span></code> à la place de <code class=\"docutils literal notranslate\"><span class=\"pre\">require_GET</span></code>.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"conditional-view-processing\">\n<h2>Traitement conditionnel de vue<a class=\"heading-anchor\" href=\"#conditional-view-processing\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Les décorateurs suivants présents dans <a class=\"reference internal\" href=\"#module-django.views.decorators.http\" title=\"django.views.decorators.http\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.views.decorators.http</span></code></a> peuvent être utilisés pour contrôler le comportement du cache sur certaines vues.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.http.condition\">\n<span class=\"sig-name descname\"><span class=\"pre\">condition</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">etag_func</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">last_modified_func</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.http.condition\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.http.etag\">\n<span class=\"sig-name descname\"><span class=\"pre\">etag</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">etag_func</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.http.etag\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.http.last_modified\">\n<span class=\"sig-name descname\"><span class=\"pre\">last_modified</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">last_modified_func</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.http.last_modified\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ces décorateurs peuvent être utilisés pour générer des en-têtes <code class=\"docutils literal notranslate\"><span class=\"pre\">ETag</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">Last-Modified</span></code>. Voir <a class=\"reference internal\" href=\"/fr/4.2/topics/conditional-view-processing/\"><span class=\"doc\">traitement conditionnel de vue</span></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"gzip-compression\">\n<span id=\"module-django.views.decorators.gzip\"></span><h2>Compression GZip<a class=\"heading-anchor\" href=\"#gzip-compression\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Les décorateurs présents dans <a class=\"reference internal\" href=\"#module-django.views.decorators.gzip\" title=\"django.views.decorators.gzip\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.views.decorators.gzip</span></code></a> contrôlent la compression du contenu vue par vue.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.gzip.gzip_page\">\n<span class=\"sig-name descname\"><span class=\"pre\">gzip_page</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.gzip.gzip_page\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ce décorateur compresse le contenu si le navigateur autorise la compression gzip. Il déclare l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code> en conséquence, de façon à ce que la mise en cache dépende de l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Accept-Encoding</span></code>.</p>\n</dd></dl>\n\n</section>\n<section id=\"vary-headers\">\n<span id=\"module-django.views.decorators.vary\"></span><h2>En-têtes Vary<a class=\"heading-anchor\" href=\"#vary-headers\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Les décorateurs présents dans <a class=\"reference internal\" href=\"#module-django.views.decorators.vary\" title=\"django.views.decorators.vary\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.views.decorators.vary</span></code></a> peuvent être utilisés pour contrôler la mise en cache reposant sur certains en-têtes des requêtes.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.vary.vary_on_cookie\">\n<span class=\"sig-name descname\"><span class=\"pre\">vary_on_cookie</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">func</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.vary.vary_on_cookie\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.vary.vary_on_headers\">\n<span class=\"sig-name descname\"><span class=\"pre\">vary_on_headers</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">headers</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.vary.vary_on_headers\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>L’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code> définit quels en-têtes de requête un mécanisme de cache doit prendre en considération pour générer sa clé de cache.</p>\n<p>Voir <a class=\"reference internal\" href=\"/fr/4.2/topics/cache/#using-vary-headers\"><span class=\"std std-ref\">utilisation des en-têtes vary</span></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"caching\">\n<span id=\"module-django.views.decorators.cache\"></span><h2>Mise en cache<a class=\"heading-anchor\" href=\"#caching\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Les décorateurs présents dans <a class=\"reference internal\" href=\"#module-django.views.decorators.cache\" title=\"django.views.decorators.cache\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.views.decorators.cache</span></code></a> contrôlent la mise en cache aux niveaux serveur et client.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.cache.cache_control\">\n<span class=\"sig-name descname\"><span class=\"pre\">cache_control</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.cache.cache_control\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ce décorateur complète l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Cache-Control</span></code> de la réponse en y ajoutant tous les paramètres nommés. Voir <a class=\"reference internal\" href=\"/fr/4.2/ref/utils/#django.utils.cache.patch_cache_control\" title=\"django.utils.cache.patch_cache_control\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">patch_cache_control()</span></code></a> pour les détails sur la transformation.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.cache.never_cache\">\n<span class=\"sig-name descname\"><span class=\"pre\">never_cache</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">view_func</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.cache.never_cache\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ce décorateur ajoute un en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Expires</span></code> à la date actuelle.</p>\n<p>Ce décorateur ajoute un en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Cache-Control:</span> <span class=\"pre\">max-age=0,</span> <span class=\"pre\">no-cache,</span> <span class=\"pre\">no-store,</span> <span class=\"pre\">must-revalidate,</span> <span class=\"pre\">private</span></code> à une réponse pour indiquer que la page ne doit jamais être mise en cache.</p>\n<p>Chaque en-tête n’est ajouté que s’il n’est pas déjà présent.</p>\n</dd></dl>\n\n</section>\n<section id=\"common\">\n<span id=\"module-django.views.decorators.common\"></span><h2>Communs<a class=\"heading-anchor\" href=\"#common\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Les décorateurs dans <a class=\"reference internal\" href=\"#module-django.views.decorators.common\" title=\"django.views.decorators.common\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.views.decorators.common</span></code></a> permettent une personnalisation par vue du comportement de l’intergiciel <a class=\"reference internal\" href=\"/fr/4.2/ref/middleware/#django.middleware.common.CommonMiddleware\" title=\"django.middleware.common.CommonMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CommonMiddleware</span></code></a>.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.common.no_append_slash\">\n<span class=\"sig-name descname\"><span class=\"pre\">no_append_slash</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.common.no_append_slash\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ce décorateur permet à des vues individuelles d’être exclues de la normalisation des URL par <a class=\"reference internal\" href=\"/fr/4.2/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APPEND_SLASH</span></code></a>.</p>\n</dd></dl>\n\n</section>","rootId":"module-django.views.decorators.http","toc":[{"title":"Méthodes HTTP autorisées","anchor":"allowed-http-methods","children":[]},{"title":"Traitement conditionnel de vue","anchor":"conditional-view-processing","children":[]},{"title":"Compression GZip","anchor":"gzip-compression","children":[]},{"title":"En-têtes Vary","anchor":"vary-headers","children":[]},{"title":"Mise en cache","anchor":"caching","children":[]},{"title":"Communs","anchor":"common","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Utilisation de Django","url":"/fr/4.2/topics/"},{"docname":"topics/http/index","title":"Gestion des requêtes HTTP","url":"/fr/4.2/topics/http/"}],"prev":{"docname":"topics/http/views","title":"Écriture de vues","url":"/fr/4.2/topics/http/views/"},"next":{"docname":"topics/http/file-uploads","title":"Envoi de fichiers","url":"/fr/4.2/topics/http/file-uploads/"},"formats":{"html":"/fr/4.2/topics/http/decorators/","markdown":"/fr/4.2/topics/http/decorators.md","json":"/fr/4.2/topics/http/decorators.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/topics/http/decorators.txt","official":"https://docs.djangoproject.com/fr/4.2/topics/http/decorators/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}