{"title":"Escrevendo “views”","version":"2.0","locale":"pt-br","docname":"topics/http/views","url":"/pt-br/2.0/topics/http/views/","canonical":"https://djangodocs.dev/pt-br/2.0/topics/http/views/","summary":"Uma função do tipo “view”, ou “view” em resumo, é simplesmente uma função Python que recebe uma requisição Web e retorna uma resposta Web. Esta resposta pode ser um…","html":"<h1>Escrevendo “views”<a class=\"heading-anchor\" href=\"#writing-views\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Uma função do tipo “view”, ou “view” em resumo, é simplesmente uma função Python que recebe uma requisição Web e retorna uma resposta Web. Esta resposta pode ser um conteúdo HTML de uma página Web, ou um redirecionamento, ou um erro 404, ou um documento XML, ou uma imagem …  ou qualquer coisa, realmente. A própria “view” contém qualquer lógica arbitrária que seja necessária para retornar a resposta. Este código pode estar em qualquer lugar que queira, contanto que esteja dentro do seu “python path”. Não existe nenhum outro requerimento–sem “mágica”, assim dizendo. Para não colcoarmos o código em <em>qualquer lugar</em>, a convenção é colcoar as “views” em um arquivo chamado <code class=\"docutils literal notranslate\"><span class=\"pre\">views.py</span></code>, colocado dentro do diretório do seu projeto ou da sua aplicação.</p>\n<section id=\"a-simple-view\">\n<h2>Uma “view” simples.<a class=\"heading-anchor\" href=\"#a-simple-view\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Aqui uma “view” que retorna a data e hora corrente, como um documento HTML:</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.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponse</span>\n<span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">datetime</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">current_datetime</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">now</span> <span class=\"o\">=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">html</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&lt;html&gt;&lt;body&gt;It is now </span><span class=\"si\">%s</span><span class=\"s2\">.&lt;/body&gt;&lt;/html&gt;&quot;</span> <span class=\"o\">%</span> <span class=\"n\">now</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">html</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Vamos passar por este código linha por linha:</p>\n<ul>\n<li><p>Primeiro, importamos a classe <a class=\"reference internal\" href=\"/pt-br/2.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> do módulo <a class=\"reference internal\" href=\"/pt-br/2.0/ref/request-response/#module-django.http\" title=\"django.http: Classes dealing with HTTP requests and responses.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.http</span></code></a>, juntamente com a biblioteca <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime</span></code> do Python.</p></li>\n<li><p>Próximo, definimos a função chamada <code class=\"docutils literal notranslate\"><span class=\"pre\">current_datetime</span></code>. Esta a função da “view”. Cada função “view” recebe um objeto <a class=\"reference internal\" href=\"/pt-br/2.0/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code></a> como seu primeiro argumento, o qual é tipicamente chamado <code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code>.</p>\n<p>Note que o nome da função “view” não importa, essa não tem que ser nominada de uma certa maniera para que o Django as reconheça. Chamaremos aqui de <code class=\"docutils literal notranslate\"><span class=\"pre\">current_time</span></code>, porque este nome claramente indica o que ela faz.</p>\n</li>\n<li><p>A “view” retorna um objeto <a class=\"reference internal\" href=\"/pt-br/2.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> que contém a resposta gerada. Cada função “view” é responsável por retornar um objeto da <a class=\"reference internal\" href=\"/pt-br/2.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a>. (existem exceções, mas chegaremos lá mais tarde.)</p></li>\n</ul>\n<aside class=\"admonition-django-s-time-zone admonition\">\n<p class=\"admonition-title\">Fuso Horário do Django</p>\n<p>O Django inclui uma definição <a class=\"reference internal\" href=\"/pt-br/2.0/ref/settings/#std-setting-TIME_ZONE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TIME_ZONE</span></code></a> cujo padrão é <code class=\"docutils literal notranslate\"><span class=\"pre\">America/Chicago</span></code>. Este provavelmente não é onde você mora, então talvez queira mudar isso no seus arquivo de definições.</p>\n</aside>\n</section>\n<section id=\"mapping-urls-to-views\">\n<h2>Mapiando URLs para “views”<a class=\"heading-anchor\" href=\"#mapping-urls-to-views\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Então, para recaptular, essa função “view” retorna uma página HTML que inclui a data e hora corrente. Para mostrar esta “view” em uma URL em particular, é necessário criar um <em>URLconf</em>; veja <a class=\"reference internal\" href=\"/pt-br/2.0/topics/http/urls/\"><span class=\"doc\">Despachante de URL</span></a> para instruções.</p>\n</section>\n<section id=\"returning-errors\">\n<h2>Retornando erros<a class=\"heading-anchor\" href=\"#returning-errors\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>É fácil retornar códigos de erros no Django. Existem subclasses de <a class=\"reference internal\" href=\"/pt-br/2.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> para vários códigos de status HTTP além do 200 (o qual significa <em>“OK”</em>). Você encontrará uma lista completa de subclasses na documentação do <a class=\"reference internal\" href=\"/pt-br/2.0/ref/request-response/#ref-httpresponse-subclasses\"><span class=\"std std-ref\">request/response</span></a>.  Apenas retorne uma instância de uma daquelas subclasses ao invés de uma <a class=\"reference internal\" href=\"/pt-br/2.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> normal para que indique um erro. Por exemplo:</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.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponse</span><span class=\"p\">,</span> <span class=\"n\">HttpResponseNotFound</span>\n\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\"># ...</span>\n    <span class=\"k\">if</span> <span class=\"n\">foo</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">HttpResponseNotFound</span><span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h1&gt;Page not found&lt;/h1&gt;&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h1&gt;Page was found&lt;/h1&gt;&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Não existe uma subclasse especializada para código de resposta HTTP possível, já que muitos deles não são muito comuns. Contudo, como documentado na documentação do <a class=\"reference internal\" href=\"/pt-br/2.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a>, você  pode também passar o código de status HTTP dentro do construtor para a  <a class=\"reference internal\" href=\"/pt-br/2.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> para que crie a classe de retorno para qualquer código de estatus que queira. Por exemplo:</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.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponse</span>\n\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\"># ...</span>\n\n    <span class=\"c1\"># Return a &quot;created&quot; (201) response code.</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"mi\">201</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Como os erros 404 são de longe o erro HTTP mais comum, existe uma maneira mais fácil de lidar com estes erros.</p>\n<section id=\"the-http404-exception\">\n<h3>A exceção <code class=\"docutils literal notranslate\"><span class=\"pre\">Http404</span></code><a class=\"heading-anchor\" href=\"#the-http404-exception\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.http.Http404\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">django.http.</span></span><span class=\"sig-name descname\"><span class=\"pre\">Http404</span></span><a class=\"heading-anchor\" href=\"#django.http.Http404\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Quando retornar um erro como o <a class=\"reference internal\" href=\"/pt-br/2.0/ref/request-response/#django.http.HttpResponseNotFound\" title=\"django.http.HttpResponseNotFound\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponseNotFound</span></code></a>, você é responsável por definir o HTML da página de erro resultante:</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=\"k\">return</span> <span class=\"n\">HttpResponseNotFound</span><span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h1&gt;Page not found&lt;/h1&gt;&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Por conveniência, e porque é uma boa idéia ter uma página de erro 404 consistente para todo o seu site, o Django fornece uma exceção <code class=\"docutils literal notranslate\"><span class=\"pre\">Http404</span></code>. Se você emitir um <code class=\"docutils literal notranslate\"><span class=\"pre\">Http404</span></code> em qualquer ponto em uma função “view”, o Django irá capturá-la e retornar a página de erro padrão para sua aplicação, juntamente com um código de erro HTTP 404.</p>\n<p>Exemplo de 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.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Http404</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">render</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">polls.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Poll</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">poll_id</span><span class=\"p\">):</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">Poll</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">poll_id</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">Poll</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span><span class=\"p\">(</span><span class=\"s2\">&quot;Poll does not exist&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;polls/detail.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;poll&#39;</span><span class=\"p\">:</span> <span class=\"n\">p</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>Para que seja mostrado um HTML personalizado quando o Django retornar um 404, você pode criar um “template” HTML chamado <code class=\"docutils literal notranslate\"><span class=\"pre\">404.htm</span></code> e colocá-lo no nível superior da sua árvore de “templates”. Este “template” irá então ser servido quando <a class=\"reference internal\" href=\"/pt-br/2.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> está definido como <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n<p>Quando <a class=\"reference internal\" href=\"/pt-br/2.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> for <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, você pode fornecer uma mensagem para <code class=\"docutils literal notranslate\"><span class=\"pre\">Http404</span></code> e ela irá aparecer em depuração no “template” 404 padrão. Use estas mensagens para propósitos de depuração; elas geralmente não são adequadas para serem usadas em um template 404 em producão.</p>\n</section>\n</section>\n<section id=\"customizing-error-views\">\n<span id=\"id1\"></span><h2>Personalizando “views” de erro<a class=\"heading-anchor\" href=\"#customizing-error-views\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>As “views”de erro padrão do Django devem ser suficientes para a maioria das alicações Web, mas podem ser facilmente sobrescritas se você precisar personalizar seu comportamento. Simplesmente especifique os manipuladores como se vê abaixo no seu URLconf (definido-os em qualquer outro lugar não terá nenhum efeito).</p>\n<p>A “view” <a class=\"reference internal\" href=\"/pt-br/2.0/ref/views/#django.views.defaults.page_not_found\" title=\"django.views.defaults.page_not_found\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">page_not_found()</span></code></a> é substituída por <a class=\"reference internal\" href=\"/pt-br/2.0/ref/urls/#django.conf.urls.handler404\" title=\"django.conf.urls.handler404\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">handler404</span></code></a>:</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=\"n\">handler404</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;mysite.views.my_custom_page_not_found_view&#39;</span>\n</code></pre></div>\n<p>A “view” <a class=\"reference internal\" href=\"/pt-br/2.0/ref/views/#django.views.defaults.server_error\" title=\"django.views.defaults.server_error\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">server_error()</span></code></a> é substituída pelo <a class=\"reference internal\" href=\"/pt-br/2.0/ref/urls/#django.conf.urls.handler500\" title=\"django.conf.urls.handler500\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">handler500</span></code></a>:</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=\"n\">handler500</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;mysite.views.my_custom_error_view&#39;</span>\n</code></pre></div>\n<p>A “view” <a class=\"reference internal\" href=\"/pt-br/2.0/ref/views/#django.views.defaults.permission_denied\" title=\"django.views.defaults.permission_denied\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">permission_denied()</span></code></a> é substituída pelo <a class=\"reference internal\" href=\"/pt-br/2.0/ref/urls/#django.conf.urls.handler403\" title=\"django.conf.urls.handler403\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">handler403</span></code></a>:</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=\"n\">handler403</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;mysite.views.my_custom_permission_denied_view&#39;</span>\n</code></pre></div>\n<p>A “view” <a class=\"reference internal\" href=\"/pt-br/2.0/ref/views/#django.views.defaults.bad_request\" title=\"django.views.defaults.bad_request\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">bad_request()</span></code></a> é substituída pelo <a class=\"reference internal\" href=\"/pt-br/2.0/ref/urls/#django.conf.urls.handler400\" title=\"django.conf.urls.handler400\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">handler400</span></code></a>:</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=\"n\">handler400</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;mysite.views.my_custom_bad_request_view&#39;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Ver também</p>\n<p>Use the <a class=\"reference internal\" href=\"/pt-br/2.0/ref/settings/#std-setting-CSRF_FAILURE_VIEW\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_FAILURE_VIEW</span></code></a> setting to override the CSRF error\nview.</p>\n</aside>\n</section>","rootId":"writing-views","toc":[{"title":"Uma “view” simples.","anchor":"a-simple-view","children":[]},{"title":"Mapiando URLs para “views”","anchor":"mapping-urls-to-views","children":[]},{"title":"Retornando erros","anchor":"returning-errors","children":[{"title":"A exceção Http404","anchor":"the-http404-exception","children":[]}]},{"title":"Personalizando “views” de erro","anchor":"customizing-error-views","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Usando o Django","url":"/pt-br/2.0/topics/"},{"docname":"topics/http/index","title":"Tratando requisições HTTP","url":"/pt-br/2.0/topics/http/"}],"prev":{"docname":"topics/http/urls","title":"Despachante de URL","url":"/pt-br/2.0/topics/http/urls/"},"next":{"docname":"topics/http/decorators","title":"“Decorators” para “view”","url":"/pt-br/2.0/topics/http/decorators/"},"formats":{"html":"/pt-br/2.0/topics/http/views/","markdown":"/pt-br/2.0/topics/http/views.md","json":"/pt-br/2.0/topics/http/views.json"},"source":"https://github.com/django/django/blob/stable/2.0.x/docs/topics/http/views.txt","official":"https://docs.djangoproject.com/pt-br/2.0/topics/http/views/","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"]}