{"title":"“Decorators” para “view”","version":"4.2","locale":"pt-br","docname":"topics/http/decorators","url":"/pt-br/4.2/topics/http/decorators/","canonical":"https://djangodocs.dev/pt-br/4.2/topics/http/decorators/","summary":"O Djanfo fornece muitos “decorators” que podem ser aplicados em “views” para suportar várias características HTTP. See Decorating the class for how to use these…","html":"<span id=\"view-decorators\"></span><h1>“Decorators” para “view”<a class=\"heading-anchor\" href=\"#module-django.views.decorators.http\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>O Djanfo fornece muitos “decorators” que podem ser aplicados em “views” para suportar várias características HTTP.</p>\n<p>See <a class=\"reference internal\" href=\"/pt-br/4.2/topics/class-based-views/intro/#id1\"><span class=\"std std-ref\">Decorating the class</span></a> for how to use these decorators with\nclass-based views.</p>\n<section id=\"allowed-http-methods\">\n<h2>Métodos HTTP permitidos<a class=\"heading-anchor\" href=\"#allowed-http-methods\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Os “decorators” em <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> podem ser usados para restringir acesso a “views” baseado no método de requisição . Estes “decorators” retornarão uma <a class=\"reference internal\" href=\"/pt-br/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> se a condição não for atendida.</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\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>“Decorator” que requer que uma “view” aceite somente alguns métodos de requisição em particular. Uso:</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>Note que o método de requisição deve estar em maiúsculas.</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\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>“Decorator” que requer que a “view” somente aceite o método 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\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>“Decorator” que requer que a “view” somente aceite o método 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\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>“Decorator” que requer que a “view” somente aceite os métodos GET e HEAD. Estes métodos são geralmente considerados “seguros” porque eles não tem a importância de tomar uma ação além de retornar o conteúdo requisitado.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Web servers should automatically strip the content of responses to HEAD\nrequests while leaving the headers unchanged, so you may handle HEAD\nrequests exactly like GET requests in your views. Since some software,\nsuch as link checkers, rely on HEAD requests, you might prefer\nusing <code class=\"docutils literal notranslate\"><span class=\"pre\">require_safe</span></code> instead of <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>Processamento condicional de “view”<a class=\"heading-anchor\" href=\"#conditional-view-processing\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Os seguintes “decorators” em <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> podem ser usados para controlar o comprtamento do “cache” em algumas “views” em particular.</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\">Link para esta definição</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\">Link para esta definição</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\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Estes “decorators” podem ser usados para gerar <code class=\"docutils literal notranslate\"><span class=\"pre\">ETag</span></code> e cabeçalhos <code class=\"docutils literal notranslate\"><span class=\"pre\">Last-Modified</span></code>; veja <a class=\"reference internal\" href=\"/pt-br/4.2/topics/conditional-view-processing/\"><span class=\"doc\">processamento condicional de “view”</span></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"gzip-compression\">\n<span id=\"module-django.views.decorators.gzip\"></span><h2>Compressão GZip<a class=\"heading-anchor\" href=\"#gzip-compression\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Os “decorators” em <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> controlam a compressão de conteúdo baseados em cada “view”.</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\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>O “decorator” comprime o conteúdo se o navegador permitir compressão “gzip”. Ele define o cabeçalho <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code> de acordo, então aquel cache irá basea seu armazenamento no cabeçalho <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>Variação de cabeçalhos<a class=\"heading-anchor\" href=\"#vary-headers\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Os “decorators” em <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> podem ser usados para controlar o “cacheamento” baseado em cabeçalhos específicos de requisições.</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\">Link para esta definição</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\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>O cabeçalho <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code> define quais cabeçalhos de requisições um mecânismo de “cache” deve levar em consideração ao construir sua chave de “cache”.</p>\n<p>Veja <a class=\"reference internal\" href=\"/pt-br/4.2/topics/cache/#using-vary-headers\"><span class=\"std std-ref\">usando cabeçalhos “vary”</span></a>.</p>\n</dd></dl>\n\n</section>\n<section id=\"caching\">\n<span id=\"module-django.views.decorators.cache\"></span><h2>“Caching” – cacheando<a class=\"heading-anchor\" href=\"#caching\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Os “decorators” em <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> controlam o “cacheamento” do lado do servidor e do cliente.</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\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>This decorator patches the response’s <code class=\"docutils literal notranslate\"><span class=\"pre\">Cache-Control</span></code> header by adding\nall of the keyword arguments to it. See\n<a class=\"reference internal\" href=\"/pt-br/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> for the details of the\ntransformation.</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\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>This decorator adds an <code class=\"docutils literal notranslate\"><span class=\"pre\">Expires</span></code> header to the current date/time.</p>\n<p>This decorator adds a <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>\n<span class=\"pre\">must-revalidate,</span> <span class=\"pre\">private</span></code> header to a response to indicate that a page\nshould never be cached.</p>\n<p>Each header is only added if it isn’t already set.</p>\n</dd></dl>\n\n</section>\n<section id=\"common\">\n<span id=\"module-django.views.decorators.common\"></span><h2>Common<a class=\"heading-anchor\" href=\"#common\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>The decorators in <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> allow per-view\ncustomization of <a class=\"reference internal\" href=\"/pt-br/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> behavior.</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\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>This decorator allows individual views to be excluded from\n<a class=\"reference internal\" href=\"/pt-br/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> URL normalization.</p>\n</dd></dl>\n\n</section>","rootId":"module-django.views.decorators.http","toc":[{"title":"Métodos HTTP permitidos","anchor":"allowed-http-methods","children":[]},{"title":"Processamento condicional de “view”","anchor":"conditional-view-processing","children":[]},{"title":"Compressão GZip","anchor":"gzip-compression","children":[]},{"title":"Variação de cabeçalhos","anchor":"vary-headers","children":[]},{"title":"“Caching” – cacheando","anchor":"caching","children":[]},{"title":"Common","anchor":"common","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Usando o Django","url":"/pt-br/4.2/topics/"},{"docname":"topics/http/index","title":"Tratando requisições HTTP","url":"/pt-br/4.2/topics/http/"}],"prev":{"docname":"topics/http/views","title":"Escrevendo “views”","url":"/pt-br/4.2/topics/http/views/"},"next":{"docname":"topics/http/file-uploads","title":"“Upload” de arquivos","url":"/pt-br/4.2/topics/http/file-uploads/"},"formats":{"html":"/pt-br/4.2/topics/http/decorators/","markdown":"/pt-br/4.2/topics/http/decorators.md","json":"/pt-br/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/pt-br/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"]}