Parte 2: Criando nosso primeiro app#
Precisamos começar definindo uma importante diferença de conceitos no Django: projetos e apps. Apps são partes de um sistema responsáveis por uma tarefa específica. Um projeto é um conjunto de um ou mais apps e pode ser entendido como o sistema em si. Por exemplo: podemos ter um app responsável pelas anotações, outro app responsável pelo pagamento e outras operações financeiras, outro app responsável por implementar um tipo de autenticação customizada do seu sistema, e assim por diante. Todos esses apps podem ser utilizados em um mesmo projeto.

Feita a diferenciação dos conceitos, no nosso caso vamos provavelmente ter apenas um app dentro do nosso projeto. Vamos criar o app chamado notes
.

Execute o seguinte comando:
python manage.py startapp notes
Ele vai criar um diretório com alguns arquivos. Por enquanto não vamos entrar em detalhes sobre o que cada um deles faz. Quando precisarmos de algum deles nós explicaremos a sua função.
Aprofundando os conhecimentos sobre uma biblioteca
Acabamos de ver que o programa manage.py
possui comandos que criam estruturas inteiras de arquivos. Ainda veremos alguns outros comandos até mais interessantes. No caso do startapp
, você poderia criar cada um desses arquivos manualmente e o resultado seria o mesmo. O comando apenas facilita esse processo, que sempre será o mesmo (é o que chamamos de boilerplate), mas é importante que aos poucos você entenda mais a fundo o que realmente acontece. Não teremos tempo para isso na disciplina, então vai depender de você se aprofundar nos temas e bibliotecas que te interessem. No momento, não importa qual, mas é importante que você se aprofunde em alguma.
O hello world
, de novo#
Nossa primeira tarefa será fazer um hello world
usando o Django. Queremos que, ao acessar a página http://localhost:8000
o usuário veja o texto "Olá mundo! Este é o app notes de DevLife do Insper."
na tela do navegador.
Para isso, abra o arquivo notes/views.py
. Nesse arquivo nós definiremos as nossas views. No contexto do Django, uma view é uma função que recebe uma requisição (com todos os parâmetros já processados e armazenados em um objeto) e devolve uma resposta.
Exercise 1
Salve seu arquivo.
Dica
Você pode deixar um terminal rodando o comando python manage.py runserver
sem parar. Assim que você salva um arquivo o servidor de desenvolvimento vai reiniciar automaticamente e o novo código será utilizado.
Visite a sua página em http://localhost:8000
.
Você não achou que seria tão fácil assim, não é mesmo? Como o Django sabe que deve utilizar a função index()
ao invés de qualquer outra? Exatamente, ele não sabe.
Na parte anterior vimos que foi criado um arquivo getit/urls.py
que vai controlar as rotas do nosso projeto. O arquivo urls.py
é o responsável por associar uma rota a uma view. Nós poderíamos apenas modificar o getit/urls.py
, mas para aumentarmos o encapsulamento vamos criar um arquivo notes/urls.py
que vai controlar apenas as rotas relacionadas ao app notes
.
Exercise 2
Estamos essencialmente dizendo para o Django que, quando a rota vazia (''
) for acessada, ele deve utilizar a função views.index
para construir a resposta.
Importante
Note que passamos views.index
como argumento. Isso quer dizer que a função em si é usada como argumento. Ela ainda não foi executada. Ela só será executada quando a rota for acessada por um cliente. Podemos fazer isso porque em Python, funções são objetos de primeira classe. Isso significa que funções podem ser armazenadas em variáveis, passadas como argumentos de funções e armazenar atributos como qualquer outro objeto em Python.
Ainda falta um detalhe. O arquivo responsável pelas rotas é o getit/urls.py
, não o notes/urls.py
. Precisamos fazer essa associação.
Exercise 3
Agora sim, teste sua página. O texto "Olá mundo! Este é o app notes de DevLife do Insper."
deve aparecer no navegador.
A função include
fala para o Django incluir na rota especificada (no caso a rota vazia ''
) todas as rotas definidas no arquivo notes/urls.py
. Ao receber uma requisição, o Django percorre a lista urlpatterns
do arquivo getit/urls.py
procurando a primeira rota que seja igual à rota solicitada. Por esse motivo, a ordem dos elementos da lista urlpatterns
é muito importante: em caso de duas rotas com o mesmo nome, será escolhida a que ocorrer primeiro.

Exercise 4
Revisão#
Parabéns! Você acabou de colocar no ar a sua primeira aplicação Web! Uma aplicação Web que recebe uma
requisição do tipo GET
e retorna um texto. Retorna um conteúdo estático que está codificado no arquivo
de views
da aplicação notes
.

Mas e se eu quiser fazer algo mais complexo? Algo onde o meu usuário envia dados, o servidor mantêm estes dados em algum lugar (persiste os dados) para então depois utilizar em outros momentos?
Como é que podemos fazer isto? A próxima etapa explica como fazer.