Escrevendo seu primeiro app Django, parte 1Link para este cabeçalho

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.

Ela irá consistir de duas partes:

  • Uma página pública que permitirá que pessoas vejam as enquetes e votem nelas.

  • Um site de administração que permite adicionar, alterar e deletar enquetes.

Assumiremos que você já tem o Django instalado. Você pode verificar se o Django está instalado e em qual versão rodando o seguinte comando em um prompt shell (indicado pelo prefixo $):

Linux / macOS

Shell
$ python -m django --version

Windows

Windows
...\> py -m django --version

Se o Django estiver instalado, você verá a versão de sua instalação. Se não estiver, você receberá uma mensagem de erro dizendo “No module named django”.

This tutorial is written for Django 5.0, which supports Python 3.10 and later. If the Django version doesn’t match, you can refer to the tutorial for your version of Django by using the version switcher at the bottom right corner of this page, or update Django to the newest version. If you’re using an older version of Python, check Qual versão do Python eu posso usar com Django? to find a compatible version of Django.

Veja Como instalar o Django para recomendação sobre como remover versões antigas do Django e instalar uma mais recente.

Criando um projetoLink para este cabeçalho

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 projeto 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.

A partir da linha de comando, execute cd para o diretório onde você gostaria de armazenar seu código, então execute o seguinte comando:

Linux / macOS

Shell
$ django-admin startproject mysite

Windows

Windows
...\> django-admin startproject mysite

Isto irá criar o diretório mysite no seu diretório atual. Se não funcionar, veja Problemas ao rodar o django-admin.

Veja a estrutura de diretório criada com o comando startproject:

Text
mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

Esses arquivos são:

  • O diretório raiz mysite/ é um contêiner para o seu projeto. Seu nome não importa para o Django; você pode renomeá-lo para qualquer nome que você quiser.

  • manage.py: 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 manage.py em django-admin and manage.py.

  • O diretório mysite/ 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, mysite.urls).

  • mysite/__init__.py: um arquivo vazio que diz ao Python que este diretório deve ser considerado um pacote Python. Se você é um iniciante Python, leia mais sobre pacotes na documentação oficial do Python.

  • mysite/settings.py: configurações para este projeto Django. Configurações do Django irá revelar para você tudo sobre o funcionamento do settings.

  • mysite/urls.py: as declarações de URLs para este projeto Django; um “índice” de seu site movido a Django. Você pode ler mais sobre URLs em Despachante de URL.

  • mysite/asgi.py: um ponto de integração para servidores web compatíveis com ASGI usado para servir seu projeto. Veja Como fazer o deploy com ASGI para mais detalhes.

  • mysite/wsgi.py: um ponto de integração para servidores web compatíveis com WSGI usado para servir seu projeto. Veja Como implementar com WSGI para mais detalhes.

O servidor de desenvolvimentoLink para este cabeçalho

Vamos verificar se ele funciona. Vá para o diretório mysite, se você ainda não estiver nele, e execute o seguinte comando:

Linux / macOS

Shell
$ python manage.py runserver

Windows

Windows
...\> py manage.py runserver

Você verá a seguinte saída na sua linha de comando:

Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

09 ago. 2026 - 15:50:53
Django version 5.0, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Agora que o servidor está funcionando, visite http://127.0.0.1:8000/ no seu navegador web. Você verá uma página de “Congratulations!”, com um foguete decolando. Funcionou!

Você iniciou o servidor de desenvolvimento do Django, um servidor web leve escrito exclusivamente em Python. Incluímos isso no Django para que você possa desenvolver coisas rapidamente, sem ter que lidar com a configuração de um servidor de produção – como o Apache – até que esteja pronto para a produção.

Agora, uma boa recomendação: não use esse servidor em ambiente de produção. Porque ele foi planejado apenas para desenvolvimento. (Nosso objetivo é criar um framework web e não um servidor web).

(To serve the site on a different port, see the runserver reference.)

Criando a aplicação de enquetes: PollsLink para este cabeçalho

Agora que seu ambiente – um “projeto” – está configurado, você está pronto para começar o trabalho.

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.

Suas aplicações, ou “apps”, podem ficar em qualquer lugar dentro do seu caminho de busca de módulos Python. Neste tutorial, iremos criar nossa “app” de enquete no mesmo diretório que seu arquivo manage.py para que possa ser importado como um módulo de nível superior dentro do projeto, ao invés de ser um submódulo de mysite.

Para criar sua aplicação, certifique-se de que esteja no mesmo diretório que manage.py e digite o seguinte comando:

Linux / macOS

Shell
$ python manage.py startapp polls

Windows

Windows
...\> py manage.py startapp polls

Isto criará um diretório polls, com a seguinte estrutura:

Text
polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

Esta estrutura de diretório irá abrigar a aplicação de enquete.

Escreva sua primeira viewLink para este cabeçalho

Hora de criar a primeira view. Abra o arquivo polls/views.py e ponha o seguinte código em Python dentro dele:

polls/views.py
Python
from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

This is the most basic view possible in Django. To access it in a browser, we need to map it to a URL - and for this we need to define a URL configuration, or “URLconf” for short. These URL configurations are defined inside each Django app, and they are Python files named urls.py.

To define a URLconf for the polls app, create a file polls/urls.py with the following content:

polls/urls.py
Python
from django.urls import path

from . import views

urlpatterns = [
    path("", views.index, name="index"),
]

Your app directory should now look like:

Text
polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py

The next step is to configure the global URLconf in the mysite project to include the URLconf defined in polls.urls. To do this, add an import for django.urls.include in mysite/urls.py and insert an include() in the urlpatterns list, so you have:

mysite/urls.py
Python
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path("polls/", include("polls.urls")),
    path("admin/", admin.site.urls),
]

A função include() permite referenciar outras URLconfs. Qualquer lugar que o Django encontrar include(), irá recortar todas as partes da URL encontrada até aquele ponto e enviar a string restante para URLconf incluído para processamento posterior.

A idéia por trás do include() é facilitar plugar URLs. Uma vez que polls está em sua própria URLconf (polls/urls.py), ele pode ser colocado depois de “/polls/”, ou depois de “/fun_polls/”, u depois de “/content/polls/”, ou qualquer outro início de caminho, e a aplicação ainda irá funcionar

Agora você amarrou uma view index no seu URLconf. Verique se funciona com o seguinte comando:

Linux / macOS

Shell
$ python manage.py runserver

Windows

Windows
...\> py manage.py runserver

Acesse http://localhost:8000/polls/ no seu navegador, e deverá ver o texto “Hello, world. You’re at the polls index.”, o qual foi definido na view “index”.

A função path() são passado quatro argumentos, dois obrigatórios: route e view, e dois opcionais: kwargs, e name. Neste ponto, vale a pena revisar para o que estes argumentos servem.

Argumento de path(): routeLink para este cabeçalho

route é uma string contento uma descrição de uma URL. Quando processa uma requisição, o Django começa pela primeira descrição, e vai descendo a lista, comparando a URL requisitada com cada descrição até que encontre uma que combine.

Descrições não distinguem paramentros GET e POST, ou o nome do domínio. Por exemplo, em uma requisição https://www.example.com/myapp/, o URLconf irá procurar por myapp/. Em uma requisição para https://www.example.com/myapp/?page=3`, o URLconf também irá procurar por ``myapp/.

Argumento de path(): viewLink para este cabeçalho

Quando o Django encontra uma descrição que combina, chama a função view especificada com um objeto HttpRequest como primeiro argumento e qualquer valor “capturado” da rota como argumentos keyword. Daremos um exemplo sobre isso logo.

Argumento de path(): kwargsLink para este cabeçalho

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.

Argumento de path(): nameLink para este cabeçalho

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.

Quando estiver confortável com o básico da sequência de requisição e resposta, leia a parte 2 desse tutorial para começar a trabalhar com banco de dados.