Neste artigo, mostrarei como publicar um site ou Api REST em Python no Web App do Azure. Lembrando que o foco do artigo não é exatamente como criar sites ou APIs Rest com o Python, mas ao longo dos artigos vou avançando na utilização dos recursos e das bibliotecas e explicando um pouco sobre o Flask e como utilizá-lo.
- Já conhece o Programa de Afiliados da FC Nuvem? Já pensou em ser remunerado quando um de seus clientes adota uma tecnologia em Nuvem? Então afilie-se em https://www.fcnuvem.com.br/afiliados com o código LUIGI.
Se você já conhece o Flask, vá direto para a parte do Azure.
Para isso, será utilizado:
- Flask, que será melhor descrito posteriormente
- Python na sua versão 3.6 (essa é a versão mais atual de suporte no Azure)
- Visual Studio Code para codificar nossa aplicação (instale a extensão do Python)
- Azure DevOps para utilização do repositório GIT que será utilizado para o deploy da aplicação
- Postman para consumir nossa API de exemplo.
Começamos pela pergunta que mais escuto:
- Por que Python?
Se você também se perguntou isso, vou tentar responder rapidamente.
Python é simples, leve, versátil, fácil de aprender e roda em todos os sistemas operacionais, e hoje – graças a estudos do Data Science – é utilizado por muitas empresas. Como já li em outros artigos, Python é o verdadeiro Canivete Suíço.
O que é Flask, então?
Flask é um micro-framework (um framework minimalista) desenvolvido em Python e baseado em três pilares:
- 1. WerkZeug: biblioteca para desenvolvimento de apps WSGI que é a especificação universal de como deve ser a interface entre um app Python e um web server
- 2. Jinja2: template engine escrito em Python – você escreve templates utilizando marcações como {{ nome_da_variavel }} ou {% for nome in lista_de_nomes %} Hello {{nome}}!! {% endfor %} e o Jinja se encarrega de renderizar este template. Ou seja, ele substitui os placeholders pelo valor de suas variáveis
- 3. Good Intentions: o Flask é Pythonico! Além do código ter alta qualidade nos quesitos de legibilidade, ele também tenta seguir as premissas do Zen do Python, e dentro dessas boas intenções nós temos o fato dele ser um micro-framework, permitindo que você tenha liberdade de estruturar seu app da maneira que desejar.
Então temos uma linguagem super poderosa em mãos e um micro-framework que nos facilita começar com a parte Web em Python.
Mãos na massa:
Instale o Python em sua versão 3.6 ou 3.7, baixe neste link. No VS Code, abra um novo terminal:
Digite o comando abaixo:
python -m pip install flask ¹
O Pip é gerenciador de pacotes do Pytho. Para quem esta familiarizado com o .Net, seria o Nuget do Python.
O comando (1) instala o pacote Flask e suas dependências. Isso significa que já podemos começar a utilizá-lo.
Ainda no VS Code pressione “Ctrl+Shift+P” e selecione a opção “Python: selecionar interpretador”:
Na etapa seguinte, selecione a versão 3.6 ou 3.7 do Python
No canto esquerdo, embaixo, deverá estar da seguinte maneira:
Pronto, o VS Code está configurado para utilizar o Python.
Abra um novo arquivo e digite o seguinte comando:
from flask import Flask, jsonify
app = Flask(__name__)
# Make the WSGI interface available at the top level so wfastcgi can get it.
wsgi_app = app.wsgi_app
@app.route('/')
def home():
return 'hello world'
profissional = [
{
'id': 1,
'nome': u'Luigi Tavolaro',
'cargo': u'Desenvolvedor',
'idade': 36
},
{
'id': 2,
'nome': u'Douglas Pereira',
'cargo': u'RH',
'idade': 25
}
]
@app.route('/api', methods=['GET'])
def api_profissionais():
return jsonify({'profissional': profissional})
if __name__ == '__main__':
app.run()
Na linha 7 estou definindo minha rota principal, onde vai rodar minha aplicação WEB, e na linha 26 estou criando a rota para a minha API.
No VS Code:



Sua aplicação Flask já está rodando – tanto a parte web, como a Api.
Agora vamos para parte do Azure:
Se você não tem uma conta no Azure, recomendo o programa Visual Studio Dev Essentials. Há diversos serviços gratuitos ou para experimentar, e o Azure é um deles: “Conta gratuita do Azure (inclui um ano de serviços gratuitos, US$200 no primeiro mês)”, se você não tem um cartão de crédito internacional, pode criar uma conta no Nubank, por exemplo.
Abra o portal do Azure e clique em App Services:



Existe uma versão do Python instalada e é a versão 3.4. A equipe do Azure não atualiza a versão do Python para não “quebrar” os aplicativos que já estão rodando. Porém, podemos fazer isso manualmente conforme abaixo:


Aceite os termos legais.
Pronto, agora temos o Python 3.6 instalado. Porém, agora precisamos instalar a biblioteca do Flask para rodar nossa aplicação.
Para isso usaremos o projeto KUDU do Azure. Dessa maneira poderemos manipular nosso WebApp via linha de comando.





Lembrando que é uma configuração Windows nosso Web App. Portanto, estamos utilizando o IIS para rodar a aplicação. Precisamos então de um Web.config para as configurações da aplicação.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="WSGI_HANDLER" value="main.app"/>
<add key="PYTHONPATH" value="D:\home\site\wwwroot"/>
<add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log"/>
</appSettings>
<system.webServer>
<httpErrors errorMode="Detailed"></httpErrors>
<handlers>
<add name="PythonHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="D:\home\Python364x64\python.exe|D:\home\Python364x64\wfastcgi.py" resourceType="Unspecified" requireAccess="Script"/>
</handlers>
</system.webServer>
</configuration>
Na linha 4 informamos quem é meu arquivo principal. Ou seja, quem deve ser executado. No caso, meu arquivo do Flask é o main.py. Portanto, na linha 4 deve estar o main.app. Essa configuração é apenas para aplicações Flask.
As demais linhas são configurações sobre caminho do Python e do FastCGI, que é utilizado para executar o script.
Agora vamos colocar nossa aplicação no repositório do Azure DevOps. Entre em https://azure.microsoft.com/pt-br/services/devops/.
Poderíamos transferir os dados via ftp também.
Clique em novo projeto e informe o nome e a descrição:
Criado o repositório, vamos fazer o push do nosso código. Eu fiz via Web mesmo, mas vocês podem usar a ferramenta de Git que vocês preferirem.

Voltando ao Portal do Azure, dentro do seu WebApp.


Pronto! Ao finalizar será feito automaticamente o Deploy da sua aplicação, e para cada novo PR, o deploy será automático. Sendo assim, temos um início de CI/CD da aplicação.

Faça parte de comunidades técnicas! É muito importante para sua carreira. Conheça as comunidades das quais sou líder:
Se inscreva no canal do YouTube também e me sigam nas redes sociais.
Valeu e obrigado!