Para se iniciar um projeto de Data Science de sucesso, é preciso saber por onde começar. Clique para ver os 5 passos principais.
Publicando seu Site ou API Rest com Flask em uma Máquina Windows com o Python 3.6(+)

Nesse artigo irei demonstrar 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.
Para isso, será utilizado:
- Flask (http://flask.pocoo.org/), que será melhor descrito posteriormente;
- Python (https://www.python.org/) na sua versão 3.6 (essa é a versão mais atual de suporte no Azure).
- Visual Studio Code (https://code.visualstudio.com/) para codificar a aplicação, instale a extensão do Python https://marketplace.visualstudio.com/items?itemName=ms-python.python
- Azure DevOps (https://azure.microsoft.com/pt-br/services/devops/) para utilização do repositório GIT que será utilizado para o deploy da aplicação.
- Postman (https://www.getpostman.com/postman) para consumir nossa API de exemplo.
Começamos da 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, roda em todos os sistemas operacionais, e hoje, graças ao estudo do Data Science, é utilizado por muitas empresas, como já li em outros artigos, Python é o verdadeiro Canivete Suiço.

O que é Flask?
Flask é um micro-framework (um framework minimalista) desenvolvido em Python e baseado em 3 pilares:
- WerkZeug é uma 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.
- Jinja2 é um 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.
- 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 deixando que você tenha liberdade de estruturar seu app da maneira que desejar.
Então nós temos uma linguagem superpoderosa em mãos e um micro-framework que nos facilita começar com a parte Web em Python.
Instale o Python em sua versão 3.6 ou 3.7, baixe em https://www.python.org/ no VS Code abra um novo Terminal

Digite o Comando python -m pip install flask (1)
O Pip é gerenciador de pacotes do Python, 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 podemos já começar a utilizá-lo e 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:
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, está definida a rota principal, onde irá funcionar minha aplicação WEB, e na linha 26, está a rota para a minha API.
No VS Code:


A aplicação está funcionando no localhost

Postman retorna o resultado da API rodando via localhost
Sua aplicação Flask já está funcionando, tanto a parte web, como a Api.
Agora vamos para parte do Azure:
Se você não tem uma conta no Azure, indico conhecer o programa Visual Studio Dev Essentials (https://visualstudio.microsoft.com/pt-br/dev-essentials/), tem diversos serviços gratuitos ou para experimentar. 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:


Clique nos itens destacados e insira o nome, o Resource Group, e o plano que será utilizado.

Após criado o recurso, entre em seu WebApp e vá em configurações, na aba General Settings escolha a Stack, no caso Python:

Clique no link Extensions:

Escolha a versão 3.6.4 x64 do Python
Aceite os termos legais:

Pronto, agora temos o Python 3.6 instalado, a versão que já é predefinida no Web App é a 3.4, portanto é necessário fazer esse passo a passo:

Clique em Advanced tools e posteriormente em Go:

Abra o CMD para manipularmos o WebApp
Agora abra o projeto KUDU, em que nos permite manipular algumas configurações do nosso Web App:

Navegue até a pasta D:\home\python364x64:

Executar o mesmo comando (1) do início do artigo:

O Flask foi instalado no nosso WebApp:
Lembrando que é uma configuração Windows Web App, portanto, estamos utilizando o IIS para funcionar 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 é necessário informar o arquivo principal, ou seja, qual deve ser executado, no caso, o 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 a aplicação no repositório do Azure DevOps, entre em https://azure.microsoft.com/pt-br/services/devops/
É possível transferir os dados via ftp também, clique em novo projeto e informe nome e a descrição:

Criado o repositório, vamos fazer o push do código, eu fiz via Web mesmo, mas você pode usar a ferramenta de Git que você preferir.


Voltando ao Portal do Azure, dentro do seu WebApp:

Clique em Deployment Center e logo após escolha o Azure Repos, vale destacar que poderia ser outros serviços como o GitHub ou até mesmo do OneDrive.


Pronto, ao finalizar, será realizado 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.


Referências
http://pythonclub.com.br/what-the-flask-pt-1-introducao-ao-desenvolvimento-web-com-python.html
Comments (0)