{"title":"Escrevendo seu primeiro app Django, parte 1","version":"2.0","locale":"pt-br","docname":"intro/tutorial01","url":"/pt-br/2.0/intro/tutorial01/","canonical":"https://djangodocs.dev/pt-br/2.0/intro/tutorial01/","summary":"Vamos aprender por um exemplo. Através deste tutorial, nós vamos caminhar através da criação de uma aplicação básica de enquetes.","html":"<h1>Escrevendo seu primeiro app Django, parte 1<a class=\"heading-anchor\" href=\"#writing-your-first-django-app-part-1\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Vamos aprender por um exemplo.</p>\n<p>Através deste tutorial, nós vamos caminhar através da criação de uma aplicação básica de enquetes.</p>\n<p>Ela irá consistir de duas partes:</p>\n<ul class=\"simple\">\n<li><p>Uma página pública que permitirá que pessoas vejam as enquetes e votem nelas.</p></li>\n<li><p>Um site de administração que permite adicionar, alterar e deletar enquetes.</p></li>\n</ul>\n<p>Assumiremos que você já tem o <a class=\"reference internal\" href=\"/pt-br/2.0/intro/install/\"><span class=\"doc\">Django instalado</span></a> . Você pode verificar se o Django está instalado e em qual versão rodando o seguinte comando em um prompt shell (indicado pelo prefixo $):</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python -m django --version\n</code></pre></div>\n<p>Se o Django estiver instalado, você verá a versão de suas instalçaõ. Se não estiver, você receberá uma mensagem de erro dizendo “No module named django”.</p>\n<p>This tutorial is written for Django 2.0, which supports Python 3.4 and\nlater. If the Django version doesn’t match, you can refer to the tutorial for\nyour version of Django by using the version switcher at the bottom right corner\nof this page, or update Django to the newest version. If you’re using an older\nversion of Python, check <a class=\"reference internal\" href=\"/pt-br/2.0/faq/install/#faq-python-version-support\"><span class=\"std std-ref\">Qual versão do Python eu posso usar com Django?</span></a> to find a compatible\nversion of Django.</p>\n<p>Veja <a class=\"reference internal\" href=\"/pt-br/2.0/topics/install/\"><span class=\"doc\">Como instalar o Django</span></a>  para recomendação sobre como remover versões antigas do Django e instar uma mais recente.</p>\n<aside class=\"admonition-where-to-get-help admonition\" role=\"note\">\n<p class=\"admonition-title\">Onde obter ajuda:</p>\n<p>Se você estiver tendo problemas no decorrer desse tutorial, por favor envie uma mensagem para <a class=\"reference internal\" href=\"/pt-br/2.0/internals/mailing-lists/#django-users-mailing-list\"><span class=\"std std-ref\">django-users</span></a> ou deixe-a em  <a class=\"reference external\" href=\"irc://irc.freenode.net/django-br\">#django-br on irc.freenode.net</a> para bater-papo com outros usuários Django dispostos a ajudar.</p>\n</aside>\n<section id=\"creating-a-project\">\n<h2>Criando um projeto<a class=\"heading-anchor\" href=\"#creating-a-project\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Se esta é a primeira vez em que você está utilizando o Django, você terá que preocupar-se com algumas configurações iniciais. Isto é, você precisará auto-gerar um código para iniciar um <a class=\"reference internal\" href=\"/pt-br/2.0/glossary/#term-project\"><span class=\"xref std std-term\">projeto</span></a> Django – uma coleção de configurações para uma instância do Django, incluindo configuração do banco de dados, opções específicas do Django e configurações específicas da aplicação.</p>\n<p>A partir da linha de comando, <code class=\"docutils literal notranslate\">cd</code> para o diretório onde você gostaria de armazenar seu código, então execute o seguinte comando:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>django-admin startproject mysite\n</code></pre></div>\n<p>This will create a <code class=\"docutils literal notranslate\">mysite</code> directory in your current directory. If it didn’t\nwork, see <a class=\"reference internal\" href=\"/pt-br/2.0/faq/troubleshooting/#troubleshooting-django-admin\"><span class=\"std std-ref\">Problemas ao rodar o django-admin</span></a>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Você precisará evitar dar nomes a projetos que remetam a componentes internos do Python ou do Django. Particularmente, isso significa que você deve evitar usar nomes como <code class=\"docutils literal notranslate\">django</code> (que irá conflitar com o próprio Django) ou <code class=\"docutils literal notranslate\">test</code> (que irá conflitar com um pacote interno do Python).</p>\n</aside>\n<aside class=\"admonition-where-should-this-code-live admonition\" role=\"note\">\n<p class=\"admonition-title\">Onde esse código deveria existir?</p>\n<p>Se você tem experiência prévia em PHP (sem o uso de um framework moderno), você deve estar acostumado a colocar o código dentro do “document root” de seu servidor Web (em um lugar como    <code class=\"docutils literal notranslate\">/var/www</code>). Com o Django você não fará isto. Não é uma boa ideia colocar qualquer código Python no document root de seu servidor Web, porque existe o risco de pessoas conseguirem ver seu código através da Web. Isso não é bom para a segurança.</p>\n<p>Coloque seu código em algum diretório <strong>fora</strong> do document root, como em <code class=\"file docutils literal notranslate\">/home/mycode</code>.</p>\n</aside>\n<p>Vamos ver o que o <a class=\"reference internal\" href=\"/pt-br/2.0/ref/django-admin/#django-admin-startproject\"><code class=\"xref std std-djadmin docutils literal notranslate\">startproject</code></a> criou:</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>mysite<span class=\"o\">/</span>\n    manage<span class=\"o\">.</span>py\n    mysite<span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n        settings<span class=\"o\">.</span>py\n        urls<span class=\"o\">.</span>py\n        wsgi<span class=\"o\">.</span>py\n</code></pre></div>\n<p>Esses arquivos são:</p>\n<ul class=\"simple\">\n<li><p>O arquivo <code class=\"file docutils literal notranslate\">mysite/</code> exterior é apenas um contêiner para o seu projeto. Seu nome não importa para Django; você pode renomeá-lo para qualquer nome que você quiser.</p></li>\n<li><p><code class=\"file docutils literal notranslate\">manage.py</code>: Um utilitário de linha de comando que permite a você interagir com esse projeto Django de várias maneiras. Você pode ler todos os detalhes sobre o <code class=\"file docutils literal notranslate\">manage.py</code> em <a class=\"reference internal\" href=\"/pt-br/2.0/ref/django-admin/\"><span class=\"doc\">django-admin and manage.py</span></a>.</p></li>\n<li><p>O arquivo <code class=\"file docutils literal notranslate\">mysite/</code> interior é o pacote Python para o seu projeto. Seu nome é o nome do pacote Python que você vai precisar usar para importar coisas do seu interior (por exemplo, <code class=\"docutils literal notranslate\">mysite.urls</code>).</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/__init__.py</code>: Um arquivo vazio que diz ao Python que este diretório deve ser considerado um pacote Python. Se você é um iniciante Python, leia <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/modules.html#tut-packages\" title=\"(em Python v3.14)\"><span class=\"xref std std-ref\">mais sobre pacotes</span></a> na documentação oficial do Python.</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/settings.py</code>: Configurações para este projeto Django. <a class=\"reference internal\" href=\"/pt-br/2.0/topics/settings/\"><span class=\"doc\">Configurações do Django</span></a> Irá revelar para você tudo sobre o funcionamento do <code class=\"docutils literal notranslate\">settings</code>.</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/urls.py</code>: As declarações de URLs para este projeto Django; um “índice” de seu site movido a Django. Você pode ler mais sobre URLs em <a class=\"reference internal\" href=\"/pt-br/2.0/topics/http/urls/\"><span class=\"doc\">Despachante de URL</span></a>.</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/wsgi.py</code>: Um ponto de integração para servidores WEB compatíveis com WSGI usado para servir seu projeto. Veja <a class=\"reference internal\" href=\"/pt-br/2.0/howto/deployment/wsgi/\"><span class=\"doc\">Como implementar com WSGI</span></a> para mais detalhes.</p></li>\n</ul>\n</section>\n<section id=\"the-development-server\">\n<h2>O servidor de desenvolvimento<a class=\"heading-anchor\" href=\"#the-development-server\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Vamos verificar se ele funciona. Vá para o diretório <code class=\"file docutils literal notranslate\">mysite</code>, se você ainda não estiver nele, e rode os seguintes comando:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py runserver\n</code></pre></div>\n<p>Você vera a seguinte saída na sua linha de comando:</p>\n<pre class=\"literal-block\">Performing system checks...\n\nSystem check identified no issues (0 silenced).\n\nYou have unapplied migrations; your app may not work properly until they are applied.\nRun 'python manage.py migrate' to apply them.\n\n09 ago. 2026 - 15:50:53\nDjango version 2.0, using settings 'mysite.settings'\nStarting development server at <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a>\nQuit the server with CONTROL-C.</pre>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Por hora, ignore os avisos sobre as migrações do banco de dados não aplicadas; lidaremos com o banco de dados brevemente.</p>\n</aside>\n<p>Você iniciou o servidor de desenvolvimento do Django, um servidor Web leve escrito puramente em Python. Nós incluímos ele com o Django, então você pode desenvolver\ncoisas rapidamente, sem ter que lidar com a configuração de um servidor Web de produção – como o Apache – até que você esteja pronto para a produção.</p>\n<p>Agora é uma boa hora para notar: <strong>não</strong> use esse servidor em nada relacionado a um ambiente de produção. Seu objetivo é ser utilizado apenas durante o desenvolvimento. (Nós estamos na atividade de criação de frameworks Web, não de servidores Web.)</p>\n<p>Now that the server’s running, visit <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a> with your Web\nbrowser. You’ll see a “Congratulations!” page, with a rocket taking off.\nIt worked!</p>\n<aside class=\"admonition-changing-the-port admonition\" role=\"note\">\n<p class=\"admonition-title\">Alterando a porta</p>\n<p>Por padrão, o comando :djadmin:<code class=\"docutils literal notranslate\">runserver</code> inicia o servidor de desenvolvimento no IP interno na porta 8000.</p>\n<p>Se você quer mudar a porta do servidor, passe ela como um argumento na linha de comando. Por exemplo, este comando iniciará o servidor na porta 8080:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py runserver <span class=\"m\">8080</span>\n</code></pre></div>\n<p>If you want to change the server’s IP, pass it along with the port. For\nexample, to listen on all available public IPs (which is useful if you are\nrunning Vagrant or want to show off your work on other computers on the\nnetwork), use:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py runserver <span class=\"m\">0</span>:8000\n</code></pre></div>\n<p><strong>0</strong> is a shortcut for <strong>0.0.0.0</strong>. Full docs for the development server\ncan be found in the <a class=\"reference internal\" href=\"/pt-br/2.0/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\">runserver</code></a> reference.</p>\n</aside>\n<aside class=\"admonition-automatic-reloading-of-djadmin-runserver admonition\" role=\"note\">\n<p class=\"admonition-title\">Releitura automática de <a class=\"reference internal\" href=\"/pt-br/2.0/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\">runserver</code></a></p>\n<p>O servidor de desenvolvimento recarrega o código Python para cada solicitação, conforme necessário. Você não precisa reiniciar o servidor para alterações de código tenham efeito. No entanto, algumas ações como a adição de arquivos não iniciam uma reinicialização, então você terá que reiniciar o servidor nestes casos.</p>\n</aside>\n</section>\n<section id=\"creating-the-polls-app\">\n<h2>Criando um aplicativo de votação<a class=\"heading-anchor\" href=\"#creating-the-polls-app\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Agora que seu ambiente – um “projeto” – está configurado, você está pronto para começar o trabalho.</p>\n<p>Cada aplicação que você escreve no Django consiste de um pacote Python que segue uma certa convenção. O Django vem com um utilitário que gera automaticamente a estrutura básica de diretório de uma aplicação, então você pode se concentrar apenas em escrever código em vez de ficar criando diretórios.</p>\n<aside class=\"admonition-projects-vs-apps admonition\" role=\"note\">\n<p class=\"admonition-title\">Projetos versus aplicações</p>\n<p>Qual é a diferença entre um projeto e um app? Um app é uma aplicação que faz alguma coisa, exemplo, um sistema de web blog, um banco de dados de registros públicos, ou uma simples aplicação de enquete. Um projeto é uma coleção de configurações e apps para um particular website. Um projeto pode conter múltiplos apps. Um app pode estar em múltiplos projetos.</p>\n</aside>\n<p>Seus “apps” podem ficar em qualquer lugar dentro do seu <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/modules.html#tut-searchpath\" title=\"(em Python v3.14)\"><span class=\"xref std std-ref\">Python path</span></a>. Neste tutorial, iremos criar nossa “app” de enquete bem ao lado do arquivo <code class=\"file docutils literal notranslate\">manage.py</code> para que possa ser importado como um módulo de nível superior dentro do projeto, ao invés de ser um sub-módulo de <code class=\"docutils literal notranslate\">mysite</code>.</p>\n<p>Para criar sua aplicação, certifique-se de que esteja no mesmo diretório que <code class=\"file docutils literal notranslate\">manage.py</code> e digite o seguinte comando:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py startapp polls\n</code></pre></div>\n<p>Que irá criar o diretório <code class=\"file docutils literal notranslate\">polls</code> com a seguinte estrutura:</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>polls<span class=\"o\">/</span>\n    <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n    admin<span class=\"o\">.</span>py\n    apps<span class=\"o\">.</span>py\n    migrations<span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n    models<span class=\"o\">.</span>py\n    tests<span class=\"o\">.</span>py\n    views<span class=\"o\">.</span>py\n</code></pre></div>\n<p>Esta estrutura de diretório irá abrigar a aplicação de enquete.</p>\n</section>\n<section id=\"write-your-first-view\">\n<h2>Escreva sua primeira view<a class=\"heading-anchor\" href=\"#write-your-first-view\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Hora de criar a primeira view. Abra o arquivo <code class=\"docutils literal notranslate\">polls/views.py</code> e ponha o seguinte código em Python dentro dele:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>polls/views.py</code></figcaption><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=\"polls/views.py\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponse\n\n\n<span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"s2\">&quot;Hello, world. You&#39;re at the polls index.&quot;</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>Esta é a view mais simples possível no Django. Para chamar a view, nós temos que mapear a URL - e por isto nós precisamos da URLconf;</p>\n<p>Para criar uma URLconf no diretório polls, Crie uma aquivo chamado <code class=\"docutils literal notranslate\">urls.py</code>. Agora seu diretório da aplicação deve ficar como:</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>polls<span class=\"o\">/</span>\n    <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n    admin<span class=\"o\">.</span>py\n    apps<span class=\"o\">.</span>py\n    migrations<span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n    models<span class=\"o\">.</span>py\n    tests<span class=\"o\">.</span>py\n    urls<span class=\"o\">.</span>py\n    views<span class=\"o\">.</span>py\n</code></pre></div>\n<p>No aquivo <code class=\"docutils literal notranslate\">polls/urls.py</code> inclua o seguinte código:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>polls/urls.py</code></figcaption><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=\"polls/urls.py\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>index<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;index&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>The next step is to point the root URLconf at the <code class=\"docutils literal notranslate\">polls.urls</code> module. In\n<code class=\"docutils literal notranslate\">mysite/urls.py</code>, add an import for <code class=\"docutils literal notranslate\">django.urls.include</code> and insert an\n<a class=\"reference internal\" href=\"/pt-br/2.0/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> in the <code class=\"docutils literal notranslate\">urlpatterns</code> list, so you have:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>mysite/urls.py</code></figcaption><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=\"mysite/urls.py\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> include<span class=\"p\">,</span> path\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;polls/&#39;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s1\">&#39;polls.urls&#39;</span><span class=\"p\">)),</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;admin/&#39;</span><span class=\"p\">,</span> admin<span class=\"o\">.</span>site<span class=\"o\">.</span>urls<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>The <a class=\"reference internal\" href=\"/pt-br/2.0/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> function allows referencing other URLconfs.\nWhenever Django encounters <a class=\"reference internal\" href=\"/pt-br/2.0/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a>, it chops off whatever\npart of the URL matched up to that point and sends the remaining string to the\nincluded URLconf for further processing.</p>\n<p>The idea behind <a class=\"reference internal\" href=\"/pt-br/2.0/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> is to make it easy to\nplug-and-play URLs. Since polls are in their own URLconf\n(<code class=\"docutils literal notranslate\">polls/urls.py</code>), they can be placed under “/polls/”, or under\n“/fun_polls/”, or under “/content/polls/”, or any other path root, and the\napp will still work.</p>\n<aside class=\"admonition-when-to-use-func-django-urls-include admonition\" role=\"note\">\n<p class=\"admonition-title\">When to use <a class=\"reference internal\" href=\"/pt-br/2.0/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a></p>\n<p>Deve-se sempre usar <code class=\"docutils literal notranslate\">include()</code> quando incluir outros “patterns” de URLs. <code class=\"docutils literal notranslate\">admin.site.urls</code> é a única excessão a isso.</p>\n</aside>\n<p>Você agora tem uma view <code class=\"docutils literal notranslate\">index</code> no URLconf. Vamos verificar se está funcionando, execute o comando:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py runserver\n</code></pre></div>\n<p>Acesse <a class=\"reference external\" href=\"http://localhost:8000/polls/\">http://localhost:8000/polls/</a> no seu browser, e deverá ver o texto “<em>Hello, world. You’re at the polls index.</em>”, o qual foi definido na “view” ìndex`.</p>\n<p>The <a class=\"reference internal\" href=\"/pt-br/2.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a> function is passed four arguments, two required:\n<code class=\"docutils literal notranslate\">route</code> and <code class=\"docutils literal notranslate\">view</code>, and two optional: <code class=\"docutils literal notranslate\">kwargs</code>, and <code class=\"docutils literal notranslate\">name</code>.\nAt this point, it’s worth reviewing what these arguments are for.</p>\n<section id=\"path-argument-route\">\n<h3><a class=\"reference internal\" href=\"/pt-br/2.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a> argument: <code class=\"docutils literal notranslate\">route</code><a class=\"heading-anchor\" href=\"#path-argument-route\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\">route</code> is a string that contains a URL pattern. When processing a request,\nDjango starts at the first pattern in <code class=\"docutils literal notranslate\">urlpatterns</code> and makes its way down\nthe list, comparing the requested URL against each pattern until it finds one\nthat matches.</p>\n<p>Patterns don’t search GET and POST parameters, or the domain name. For example,\nin a request to <code class=\"docutils literal notranslate\">https://www.example.com/myapp/</code>, the URLconf will look for\n<code class=\"docutils literal notranslate\">myapp/</code>. In a request to <code class=\"docutils literal notranslate\">https://www.example.com/myapp/?page=3</code>, the\nURLconf will also look for <code class=\"docutils literal notranslate\">myapp/</code>.</p>\n</section>\n<section id=\"path-argument-view\">\n<h3><a class=\"reference internal\" href=\"/pt-br/2.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a> argument: <code class=\"docutils literal notranslate\">view</code><a class=\"heading-anchor\" href=\"#path-argument-view\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>When Django finds a matching pattern, it calls the specified view function with\nan <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\">HttpRequest</code></a> object as the first argument and any\n“captured” values from the route as keyword arguments. We’ll give an example\nof this in a bit.</p>\n</section>\n<section id=\"path-argument-kwargs\">\n<h3><a class=\"reference internal\" href=\"/pt-br/2.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a> argument: <code class=\"docutils literal notranslate\">kwargs</code><a class=\"heading-anchor\" href=\"#path-argument-kwargs\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Argumentos nomeados arbitrários podem ser passadas em um dicionário para a view de destino. Nós não vamos usar este recurso do Django neste tutorial.</p>\n</section>\n<section id=\"path-argument-name\">\n<h3><a class=\"reference internal\" href=\"/pt-br/2.0/ref/urls/#django.urls.path\" title=\"django.urls.path\"><code class=\"xref py py-func docutils literal notranslate\">path()</code></a> argument: <code class=\"docutils literal notranslate\">name</code><a class=\"heading-anchor\" href=\"#path-argument-name\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Nomear sua URL permite que você referencie ela de forma inequívoca  de qualquer lugar no Django especialmente nos templates. Este poderoso recurso permite que você faça alterações globais nos padrões de URL de seu projeto enquanto modifica um único arquivo.</p>\n<p>Quando estiver confortável com o básico da sequência de request e response, leia <a class=\"reference internal\" href=\"/pt-br/2.0/intro/tutorial02/\"><span class=\"doc\">part 2 of this tutorial</span></a>  para começar a trabalhar com banco de dados.</p>\n</section>\n</section>","rootId":"writing-your-first-django-app-part-1","toc":[{"title":"Criando um projeto","anchor":"creating-a-project","children":[]},{"title":"O servidor de desenvolvimento","anchor":"the-development-server","children":[]},{"title":"Criando um aplicativo de votação","anchor":"creating-the-polls-app","children":[]},{"title":"Escreva sua primeira view","anchor":"write-your-first-view","children":[{"title":"path() argument: route","anchor":"path-argument-route","children":[]},{"title":"path() argument: view","anchor":"path-argument-view","children":[]},{"title":"path() argument: kwargs","anchor":"path-argument-kwargs","children":[]},{"title":"path() argument: name","anchor":"path-argument-name","children":[]}]}],"breadcrumbs":[{"docname":"intro/index","title":"Introdução","url":"/pt-br/2.0/intro/"}],"prev":{"docname":"intro/install","title":"Guia de instalação rápida","url":"/pt-br/2.0/intro/install/"},"next":{"docname":"intro/tutorial02","title":"Escrevendo sua primeira aplicação Django, parte 2","url":"/pt-br/2.0/intro/tutorial02/"},"formats":{"html":"/pt-br/2.0/intro/tutorial01/","markdown":"/pt-br/2.0/intro/tutorial01.md","json":"/pt-br/2.0/intro/tutorial01.json"},"source":"https://github.com/django/django/blob/stable/2.0.x/docs/intro/tutorial01.txt","official":"https://docs.djangoproject.com/pt-br/2.0/intro/tutorial01/","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"]}