Utilizando Flask, API REST e IAM com o InterSystems IRIS
Parte 2 – Aplicativo Flask
Flask é um microframework de desenvolvimento web escrito em Python. Ele é conhecido por ser simples, flexível e permitir o desenvolvimento rápido de aplicações.
A instalação do Flask é muito simples. Depois de ter o python instalado corretamente no seu sistema operacional precisamos instalar a biblioteca flask com o comando pip. Para o consumo de API REST é aconselhado o uso da biblioteca requests. O link a seguir traz um guia para a instalação do flask: https://flask.palletsprojects.com/en/stable/installation/
Instalado o flask, vamos então começar com a estrutura do nosso aplicativo. Vamos criar os diretórios e sub-diretórios para acomodar nossos arquivos:
/--+
|
+-- static
|
+-- templates
Vamos então seguir essa definição. Por exemplo, em c:\temp vamos criar o diretório flask e abaixo vamos criar os sub-diretórios static e template.
Siga a documentação de instalação e instale e configute o venv. Depois instale a biblioteca flask como o comando pip. A documentação do flask mostra o comando. Lembre-se que você precisa já ter o python instalado.
Depois de instalar a biblioteca flask, instale a biblioteca requests com o pip, da mesma forma que instalou o flask.
No diretório flask vamos colocar nossa aplicação python. A seguir o código da aplicação:
from flask import Flask, render_template, request, redirect, url_for
import requests
from requests.auth import HTTPBasicAuth
app = Flask(__name__)
API_URL = "http://192.168.0.13/iris/rest/servico/cliente"
USERNAME = "_SYSTEM"
PASSWD = "SYS"
# Rota para Listar Registros
@app.route('/')
def index():
response = requests.get(API_URL, auth=HTTPBasicAuth(USERNAME, PASSWD))
data = response.json()
lista = data["clientes"]
return render_template("index.html", registros=lista)
# Rota para Exibir o Formulário de Inclusão
@app.route('/incluir', methods=['GET'])
def incluir():
return render_template("form.html", registro={"id": "", "nome": "", "idade": ""}, acao="Incluir")
# Rota para Criar um Novo Registro
@app.route('/criar', methods=['POST'])
def criar():
dados = {
"nome": request.form["nome"],
"idade": request.form["idade"]
}
requests.post(API_URL, json=dados, auth=HTTPBasicAuth(USERNAME, PASSWD))
return redirect(url_for("index"))
# Rota para Exibir o Formulário de Edição
@app.route('/editar/<int:id>', methods=['GET'])
def editar(id):
response = requests.get(f"{API_URL}/{id}", auth=HTTPBasicAuth(USERNAME, PASSWD))
registro = response.json() if response.status_code == 200 else {"id": "", "nome": "", "idade": ""}
return render_template("form.html", registro=registro, acao="Editar")
# Rota para Atualizar um Registro Existente
@app.route('/atualizar/<int:id>', methods=['POST'])
def atualizar(id):
dados = {
"nome": request.form["nome"],
"idade": request.form["idade"]
}
requests.put(f"{API_URL}/{id}", json=dados, auth=HTTPBasicAuth(USERNAME, PASSWD))
return redirect(url_for("index"))
# Rota para Deletar um Registro
@app.route('/deletar/<int:id>')
def deletar(id):
requests.delete(f"{API_URL}/{id}", auth=HTTPBasicAuth(USERNAME, PASSWD))
return redirect(url_for("index"))
if __name__ == "__main__":
app.run(debug=True)
O código é bem simples, temos as rotas de inclusão, alteração, deleção, uma rota para listar os registros existentes e dar acesso as opções de manutenção, e os formulários de inclusão e alteração.
Agora vamos para o sub-diretório static. Nele vamos colocar nosso arquivo de CSS style.css:
body {
;
text-align: center;
margin: 20px;
}
table {
width: 60%;
margin: auto;
border-collapse: collapse;
}
th, td {
border: 1px solid black;
padding: 8px;
}
a {
text-decoration: none;
color: blue;
}
E no sub-diretório templates vamos colocar nossos arquivos HTML index.html e form.html:
index.html
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8">
<title>CRUD Flask</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
<h2>Lista de Registros</h2>
<a href="{{ url_for('incluir') }}">Adicionar Novo</a>
<table border="1">
<tr>
<th>ID</th>
<th>Nome</th>
<th>Idade</th>
<th>Ações</th>
</tr>
{% for reg in registros %}
<tr>
<td>{{ reg.id }}</td>
<td>{{ reg.nome }}</td>
<td>{{ reg.idade }}</td>
<td>
<a href="{{ url_for('editar', id=reg.id) }}">Editar</a> |
<a href="{{ url_for('deletar', id=reg.id) }}" onclick="return confirm('Tem certeza?')">Excluir</a>
</td>
</tr>
{% endfor %}
</table>
</body>
</html>
form.html
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8">
<title>{{ acao }} Registro</title>
</head>
<body>
<h2>{{ acao }} Registro</h2>
<form method="POST" action="{{ url_for('criar' if acao == 'Incluir' else 'atualizar', id=registro.id) }}">
<label>Nome:</label>
<input type="text" name="nome" value="{{ registro.nome }}" required><br>
<label>idade:</label>
<input type="text" name="idade" value="{{ registro.idade }}" required><br>
<button type="submit">{{ acao }}</button>
</form>
<a href="{{ url_for('index') }}">Voltar</a>
</body>
</html>
Para executar a aplicação basta ir para o diretório onde estamos com nossa aplicação python (no nosso caso, c:\temp\flask), ativar o venv (ambiente virtual) e executar a aplicação:
Agora podemos acessar nossa aplicação acessando a porta 5000 com um navegador:
Clicando no link Adicionar Novo temos a tela de inclusão de registros na nossa classe:
Voltando a tela de index, selecionado Alterar em algum registro, temos a tela de alteração:
E, novamente voltando a tela de index, clicando em Excluir vamos para a confirmação da deleção:
Com isso terminamos esta parte do artigo. Já temos a nossa classe persistente criada, a API REST publicada e uma aplicação em flask consumindo esta API com a biblioteca requests para realizar a manutenção básica (CRUD) nos nossos registros.
Até a próxima!