Artigo
· Fev. 12 6min de leitura

Utilizando API REST, Flask e IAM com o InterSystems IRIS - Parte 2 – Aplicativo Flask

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!

Discussão (0)1
Entre ou crie uma conta para continuar