{"title":"“Decorators” para “view”","version":"1.9","locale":"pt-br","docname":"topics/http/decorators","url":"/pt-br/1.9/topics/http/decorators/","canonical":"https://djangodocs.dev/pt-br/1.9/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/1.9/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>O Django irá tirar automaticamente o conteúdo de respostas de requisições HEAD enquanto deia o cabeçalho imutável, de modo que você pode nas suas “views” lidar com requisições HEAD exatamente da mesma maneira que lida com requisições GET. Já que alguns softwares, como checadores de links, dependem de requisições HEAD, você talvez prefira usar o <code class=\"docutils literal notranslate\">require_safe</code> ao invés do <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/1.9/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/1.9/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.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<aside class=\"version-note version-changed\" data-version=\"1.9\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 1.9</p><p>Antes do Django 1.9, <code class=\"docutils literal notranslate\">Cache-Control: max-age=0</code> era enviado. Isso não preveni de forma confiável o “cahe” em todos os browsers.</p>\n</aside>\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":"Using Django","url":"/pt-br/1.9/topics/"},{"docname":"topics/http/index","title":"Handling HTTP requests","url":"/pt-br/1.9/topics/http/"}],"prev":{"docname":"topics/http/views","title":"Escrevendo “views”","url":"/pt-br/1.9/topics/http/views/"},"next":{"docname":"topics/http/file-uploads","title":"“Upload” de arquivos","url":"/pt-br/1.9/topics/http/file-uploads/"},"formats":{"html":"/pt-br/1.9/topics/http/decorators/","markdown":"/pt-br/1.9/topics/http/decorators.md","json":"/pt-br/1.9/topics/http/decorators.json"},"source":"https://github.com/django/django/blob/stable/1.9.x/docs/topics/http/decorators.txt","official":"https://docs.djangoproject.com/pt-br/1.9/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","fr","ja","id","pt-br","es"]}