Introdução
Neste tutorial, vamos guiá-lo através da criação de uma aplicação de votação básica.
Neste tutorial, vamos guiá-lo através da criação de uma aplicação de votação básica.
Vamos aprender por meio de exemplos.
Ao longo deste tutorial, vamos guiá-lo através da criação de uma aplicação de votação básica.
Ela consistirá em duas partes:
Vamos assumir que você já tem o Django instalado. Você pode verificar se o Django está instalado e qual versão executando o seguinte comando em um prompt de shell:
python -m django --version
Se o Django estiver instalado, você deverá ver a versão da sua instalação. Caso contrário, você receberá um erro informando "No module named django".
Este tutorial foi escrito para o Django, que suporta Python 3.10 e versões posteriores. Se a versão do Django não corresponder, você pode consultar o tutorial para sua versão do Django usando o seletor de versão no canto inferior direito desta página, ou atualizar o Django para a versão mais recente.
Se esta é a sua primeira vez usando o Django, você precisará cuidar de algumas configurações iniciais. Especificamente, você precisará gerar automaticamente algum código que estabelece um project do Django -- uma coleção de configurações para uma instância do Django, incluindo configuração de banco de dados, opções específicas do Django e configurações específicas da aplicação.
Na linha de comando, use cd para entrar em um diretório onde você gostaria de armazenar seu código e, em seguida, execute o seguinte comando:
cd ~/project
django-admin startproject mysite
Isso criará um diretório mysite no seu diretório atual.
Vamos dar uma olhada no que startproject criou:
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
Esses arquivos são:
mysite/ é um contêiner para o seu projeto. Seu nome não importa para o Django; você pode renomeá-lo para o que quiser.manage.py: Um utilitário de linha de comando que permite interagir com este projeto Django de várias maneiras.mysite/ é o pacote Python real para o seu projeto. Seu nome é o nome do pacote Python que você precisará usar para importar qualquer coisa dentro dele (por exemplo, mysite.urls).mysite/__init__.py: Um arquivo vazio que informa ao Python que este diretório deve ser considerado um pacote Python.mysite/settings.py: Configurações/configuração para este projeto Django.mysite/urls.py: As declarações de URL para este projeto Django; um "sumário" do seu site com tecnologia Django.mysite/asgi.py: Um ponto de entrada para servidores web compatíveis com ASGI para servir seu projeto.mysite/wsgi.py: Um ponto de entrada para servidores web compatíveis com WSGI para servir seu projeto.Vamos verificar se o seu projeto Django funciona. Mude para o diretório mysite externo, se ainda não o fez, e execute os seguintes comandos:
cd ~/project/mysite
python manage.py runserver
Você verá a seguinte saída na 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.
- 15:50:53 Django version , using settings 'mysite.settings' Starting development server at <http://127.0.0.1:8000/> Quit the server with CONTROL-C.
Ignore o aviso sobre migrações de banco de dados não aplicadas por enquanto; lidaremos com o banco de dados em breve.
Você iniciou o servidor de desenvolvimento Django, um servidor web leve escrito puramente em Python. Incluímos isso com o Django para que você possa desenvolver as 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 é um bom momento para notar: não use este servidor em nada que se assemelhe a um ambiente de produção. Ele se destina apenas ao uso durante o desenvolvimento. (Estamos no negócio de fazer frameworks web, não servidores web.)
Agora que o servidor está em execução, visite http://127.0.0.1:8000/ com seu navegador web. Ou, execute curl 127.0.0.1:8000 no terminal. Você verá uma página "Parabéns!", com um foguete decolando. Funcionou!
Na VM LabEx, precisamos adicionar o domínio LabEx a ALLOWED_HOSTS. Edite mysite/settings.py e adicione * ao final de ALLOWED_HOSTS, para que fique assim:
ALLOWED_HOSTS = ["*"]
Isso informa ao Django que ele pode servir solicitações com qualquer cabeçalho de host.

Por padrão, o comando runserver inicia o servidor de desenvolvimento no IP interno na porta 8000.
Se você quiser alterar a porta do servidor, passe-a como um argumento de linha de comando. Por exemplo, este comando inicia o servidor na porta 8080:
python manage.py runserver 8080
Se você quiser alterar o IP do servidor, passe-o junto com a porta. Por exemplo, para ouvir em todos os IPs públicos disponíveis (o que é útil se você estiver executando o Vagrant ou quiser mostrar seu trabalho em outros computadores na rede), use:
python manage.py runserver 0.0.0.0:8080
Agora, mude para a aba Web 8080 na VM LabEx e você verá a mesma página "Parabéns".

A documentação completa para o servidor de desenvolvimento pode ser encontrada na referência runserver.
Recarregamento automático de
runserver
O servidor de desenvolvimento recarrega automaticamente o código Python para cada solicitação, conforme necessário. Você não precisa reiniciar o servidor para que as alterações no código entrem em vigor. No entanto, algumas ações, como adicionar arquivos, não acionam uma reinicialização, então você terá que reiniciar o servidor nesses casos.
Agora que seu ambiente -- um "projeto" -- está configurado, você está pronto para começar a trabalhar.
Cada aplicação que você escreve em Django consiste em um pacote Python que segue uma certa convenção. Django vem com um utilitário que gera automaticamente a estrutura básica de diretórios de um aplicativo, para que você possa se concentrar em escrever código em vez de criar diretórios.
Projetos vs. aplicativos
Qual é a diferença entre um projeto e um aplicativo? Um aplicativo é uma aplicação web que faz algo -- por exemplo, um sistema de blog, um banco de dados de registros públicos ou um pequeno aplicativo de enquetes. Um projeto é uma coleção de configurações e aplicativos para um determinado site. Um projeto pode conter vários aplicativos. Um aplicativo pode estar em vários projetos.
Seus aplicativos podem viver em qualquer lugar no seu Python path <tut-searchpath>. Neste tutorial, criaremos nosso aplicativo de enquetes no mesmo diretório do seu arquivo manage.py para que ele possa ser importado como seu próprio módulo de nível superior, em vez de um submódulo de mysite.
Para criar seu aplicativo, certifique-se de estar no mesmo diretório que manage.py e digite este comando:
cd ~/project/mysite
python manage.py startapp polls
Isso criará um diretório polls, que é organizado assim:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
Esta estrutura de diretórios abrigará a aplicação de enquetes.
Vamos escrever a primeira view. Abra o arquivo polls/views.py e coloque o seguinte código Python nele:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
Esta é a view mais simples possível em Django. Para chamar a view, precisamos mapeá-la para uma URL - e para isso precisamos de um URLconf.
Para criar um URLconf no diretório polls, crie um arquivo chamado urls.py. Seu diretório de aplicativo agora deve ser assim:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
No arquivo polls/urls.py, inclua o seguinte código:
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
]
A próxima etapa é apontar o URLconf raiz para o módulo polls.urls. Em mysite/urls.py, adicione uma importação para django.urls.include e insira um ~django.urls.include na lista urlpatterns, para que você tenha:
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 ~django.urls.include permite referenciar outros URLconfs. Sempre que Django encontra ~django.urls.include, ele corta a parte da URL que correspondeu até aquele ponto e envia a string restante para o URLconf incluído para processamento adicional.
A ideia por trás de ~django.urls.include é facilitar o plug-and-play de URLs. Como as enquetes estão em seu próprio URLconf (polls/urls.py), elas podem ser colocadas em "/polls/", ou em "/fun_polls/", ou em "/content/polls/", ou em qualquer outra raiz de caminho, e o aplicativo ainda funcionará.
Quando usar
~django.urls.include()
Você sempre deve usarinclude()ao incluir outros padrões de URL.admin.site.urlsé a única exceção a isso.
Você agora conectou uma view index ao URLconf. Verifique se está funcionando com o seguinte comando:
python manage.py runserver 0.0.0.0:8080
Vá para <http://index.

A função ~django.urls.path recebe quatro argumentos, dois obrigatórios: route e view, e dois opcionais: kwargs e name. Neste ponto, vale a pena revisar para que servem esses argumentos.
~django.urls.path: routeroute é uma string que contém um padrão de URL. Ao processar uma solicitação, Django começa no primeiro padrão em urlpatterns e percorre a lista, comparando a URL solicitada com cada padrão até encontrar um que corresponda.
Os padrões não pesquisam parâmetros GET e POST, ou o nome de domínio. Por exemplo, em uma solicitação para https://www.example.com/myapp/, o URLconf procurará por myapp/. Em uma solicitação para https://www.example.com/myapp/?page=3, o URLconf também procurará por myapp/.
~django.urls.path: viewQuando Django encontra um padrão correspondente, ele chama a função de view especificada com um objeto ~django.http.HttpRequest como o primeiro argumento e quaisquer valores "capturados" da rota como argumentos de palavra-chave. Daremos um exemplo disso em breve.
~django.urls.path: kwargsArgumentos de palavra-chave arbitrários podem ser passados em um dicionário para a view de destino. Não vamos usar este recurso do Django no tutorial.
~django.urls.path: nameNomear sua URL permite que você se refira a ela de forma inequívoca de outras partes do Django, especialmente de dentro dos templates. Este recurso poderoso permite que você faça alterações globais nos padrões de URL do seu projeto, tocando apenas em um único arquivo.
Parabéns! Você concluiu o laboratório de Criação de um Aplicativo de Enquetes Básico. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.