Princípios fundamentais do Flask
O Flask é uma “microarquitetura” Web open-source. Quando os criadores utilizam o termo “microarquitetura”, quer dizer que a arquitetura vai desempenhar as tarefas necessárias de uma arquitetura Web, mas não inclui funcionalidades avançadas ou outros requisitos específicos que a aplicação deve seguir para funcionar corretamente. Essa abordagem permite que o Flask seja extremamente flexível e perfeito para uso como front-end para back-ends ou APIs existentes - como os serviços de IA do Azure!
Ao criar uma aplicação Web com qualquer arquitetura, existem alguns conceitos centrais que precisamos de compreender: encaminhamento, métodos e modelagem. Vamos explorar estes conceitos antes de escrevermos o código.
Responder aos pedidos dos utilizadores com rotas
Quando um utilizador utiliza uma aplicação Web, indica o que quer fazer ou as informações de que está à procura, ao navegar para URLs (Uniform Resource Locators) diferentes. O utilizador pode escrever um endereço diretamente (por exemplo, https://adventure-works.com
) ou selecionar uma ligação ou um botão que inclua o URL adequado. Num site de comércio eletrónico, pode ter URLs com um aspeto semelhante ao seguinte:
https://adventure-works.com/
para a página principalhttps://adventure-works.com/products/widget
para obter detalhes sobre um Widgethttps://adventure-works.com/cart/buy
para concluir a compra
Como programador, na realidade, não precisamos de nos preocupar com a primeira parte do URL ou com o domínio (adventure-works.com no nosso exemplo). A nossa aplicação é colocada em ação com base no que vier após o nome de domínio, que começa com /. A parte após o nome de domínio é conhecida como rota.
Uma rota é um caminho para uma ação. Semelhante a tocar num botão numa aplicação móvel, uma rota indica a ação que o utilizador quer realizar. Vamos registar rotas diferentes na nossa aplicação Web para responder aos vários pedidos que a nossa aplicação suporta.
Na nossa aplicação, indicamos a forma como queremos responder a um determinado pedido de rota ao disponibilizar uma função. Uma rota é um mapa para uma função. Quando pensamos na escrita de código no geral, este conceito é relativamente natural. Quando queremos executar uma ação em particular, chamamos uma função. Os nossos utilizadores vão fazer exatamente a mesma coisa! Apenas o vão fazer de uma forma ligeiramente diferente, ao aceder a uma rota.
Métodos ou verbos
As rotas podem ser acedidas de várias formas, através do que conhecemos como métodos ou verbos (os dois termos significam a mesma coisa e podem ser utilizados de forma intercambiável). A forma como a rota é acedida proporciona contexto adicional sobre o estado do pedido do utilizador e que ação o utilizador quer executar.
Existem muitos métodos disponíveis ao criar uma aplicação Web, mas os dois mais frequentes (e os dois sobre os quais nos vamos focar) são GET e POST. Normalmente, GET indica que o utilizador está a pedir informações, enquanto POST indica que o utilizador precisa de nos enviar algo e receber uma resposta.
Nota
Independentemente do verbo utilizado, as informações podem sempre ser devolvidas ao utilizador.
Um fluxo de aplicação comum que utiliza GET e POST gira em torno da utilização de um formulário. Vamos supor que criamos uma aplicação na qual o utilizador se quer registar numa lista de correio:
- O utilizador acede ao formulário de inscrição através de GET
- O utilizador preenche o formulário e seleciona o botão submeter
- As informações do formulário são enviadas de volta ao servidor com POST
- Uma mensagem de “êxito” é devolvida ao utilizador
Como pode calcular, o utilizador não indica diretamente o verbo que quer utilizar, este é controlado pela aplicação. Em termos gerais, se o utilizador navegar diretamente para um URL ao escrevê-lo ou ao selecionar uma ligação, obterá acesso à página GET. Quando seleciona um botão para um formulário, normalmente as informações são enviadas através de POST.
Nota
Estamos a manter esta conversa num nível relativamente elevado, dado que uma discussão completa dos métodos está para lá do âmbito deste módulo.
Modelos
A Linguagem HTML (Hypertext Markup Language) ou simplesmente HTML é a linguagem utilizada para estruturar as informações apresentadas num browser, enquanto CSS (Cascading Style Sheets) é utilizado para gerir o estilo e o esquema. Ao criar uma aplicação, a maior parte do HTML será estático, o que significa que não será alterado. No entanto, para tornar as páginas dinâmicas, é necessário conseguir colocar informações de forma programática numa página HTML. Quase todas as arquiteturas Web suportam este requisito através de modelos.
Um modelo permite-lhe escrever HTML principal (ou um modelo) e indicar marcadores de posição para as informações dinâmicas. A sintaxe mais comum para espaços reservados é, provavelmente, {{ }}
. O Jinja, o motor de modelagem do Flask, utiliza esta sintaxe.
<h1>Welcome, {{ name }}</h1>
No exemplo anterior, temos o HTML de h1
(um cabeçalho), com o texto que queremos apresentar. O {{ name }}
indica que queremos apresentar uma variável com o nome name
, imediatamente após Bem-vindo. Ao utilizar esta sintaxe, podemos escrever o HTML com as nossas competências existentes e injetar as informações dinâmicas conforme necessário.