{"title":"“Decorators” para “view”","version":"2.1","locale":"pt-br","docname":"topics/http/decorators","url":"/pt-br/2.1/topics/http/decorators/","canonical":"https://djangodocs.dev/pt-br/2.1/topics/http/decorators/","summary":"O Djanfo fornece muitos “decorators” que podem ser aplicados em “views” para suportar várias características HTTP.","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<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\">django.views.decorators.http</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/2.1/ref/request-response/#django.http.HttpResponseNotAllowed\" title=\"django.http.HttpResponseNotAllowed\"><code class=\"xref py py-class docutils literal notranslate\">django.http.HttpResponseNotAllowed</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\">require_http_methods</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request_method_list</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=\"nn\">django.views.decorators.http</span> <span class=\"kn\">import</span> require_http_methods\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=\"nf\">my_view</span><span class=\"p\">(</span>request<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\">require_GET</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\">require_POST</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\">require_safe</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\">require_safe</code> instead of <code class=\"docutils literal notranslate\">require_GET</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\">django.views.decorators.http</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\">condition</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">etag_func<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">last_modified_func<span class=\"o\">=</span><span class=\"default_value\">None</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\">etag</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">etag_func</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\">last_modified</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">last_modified_func</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\">ETag</code> e cabeçalhos <code class=\"docutils literal notranslate\">Last-Modified</code>; veja <a class=\"reference internal\" href=\"/pt-br/2.1/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\">django.views.decorators.gzip</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\">gzip_page</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\">Vary</code> de acordo, então aquel cache irá basea seu armazenamento no cabeçalho <code class=\"docutils literal notranslate\">Accept-Encoding</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\">django.views.decorators.vary</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\">vary_on_cookie</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">func</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\">vary_on_headers</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>headers</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\">Vary</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/2.1/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\">django.views.decorators.cache</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\">cache_control</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</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\">Cache-Control</code> header by adding\nall of the keyword arguments to it. See\n<a class=\"reference internal\" href=\"/pt-br/2.1/ref/utils/#django.utils.cache.patch_cache_control\" title=\"django.utils.cache.patch_cache_control\"><code class=\"xref py py-func docutils literal notranslate\">patch_cache_control()</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\">never_cache</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">view_func</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>O <code class=\"docutils literal notranslate\">decorator</code> adiciona um cabeçalho <code class=\"docutils literal notranslate\">Cache-Control: max-age=0, no-cache, no-store, must-revalidate</code> para que uma resposta indique que uma página nunca deve ser “cacheada”.</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":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Usando o Django","url":"/pt-br/2.1/topics/"},{"docname":"topics/http/index","title":"Tratando requisições HTTP","url":"/pt-br/2.1/topics/http/"}],"prev":{"docname":"topics/http/views","title":"Escrevendo “views”","url":"/pt-br/2.1/topics/http/views/"},"next":{"docname":"topics/http/file-uploads","title":"“Upload” de arquivos","url":"/pt-br/2.1/topics/http/file-uploads/"},"formats":{"html":"/pt-br/2.1/topics/http/decorators/","markdown":"/pt-br/2.1/topics/http/decorators.md","json":"/pt-br/2.1/topics/http/decorators.json"},"source":"https://github.com/django/django/blob/stable/2.1.x/docs/topics/http/decorators.txt","official":"https://docs.djangoproject.com/pt-br/2.1/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","pt-br","ko","es","el","pl"]}