Costruire WEB-APP IBM i con Python-Flask

Flask è un framework di Python fantastico e davvero leggero per creare potenti web application ed è un ottimo strumento per creare i propri siti web in modo dinamico ed interattivo.
Con questa tecnica si possono creare delle integrazioni applicative interessanti su Ibm-I , anche su versioni antecedenti alla 7.X.
Il framework più famoso di python per costruire applicazione web è django, però con flask si possono da subito ottenere risultati eccellenti e modernizzare i processi gestionali con nuove applicazioni che sfruttano le tecnologie attuali quali boostrap, jquery, ecc.
In questa articolo illustro un esempio semplice per comprendere la struttura di base dell’applicazione e le sue potenzialità.

Prequisiti

Applicazione flask python

Questo è il cuore del programma python nel quale avviene l’engine della pagina html attraverso il framework flask di python.
Il “render_template” è tutto ciò che il server rende sotto forma di html e il”route” rende il nome della pagina da inserire nell’url del browser.

from flask import Flask, render_template
from tkISeries import tkISeries 
app = Flask(__name__)
@app.route('/articoli', methods=('GET', 'POST'))
 def articoli():
     iseries=tkISeries()
     iseries.connection()
     rows=iseries.selectArticoli(iseries.c1)
     return render_template('/articoli.html', len = len(rows), lenr = len(rows[0]), rows=rows)

Connessione IBM-I

Questa è un esempio della classe python per l’esecuzione della connessione al database e della select per il ritorno delle colonne, istanziata dall’applicazione principale.
Il pacchetto python “pypyodbc” e il driver odbc Ibm sono i prerequisiti per la connessione e l’esecuzione delle specifiche sql desiderate.

mainapp.py

import pypyodbc
class tkISeries():
     def init(self):
         super(tkISeries, self).init()
     def connection(self):
         #xxx.xxx.xxx.xxx Ip Ibm-I user=utente Ibm-I password=password utente Ibm-I 
         connection = pypyodbc.connect(driver='{iSeries Access ODBC Driver}',
                         system='xxx.xxx.xxx.xxx',uid='user',pwd='password')
         self.c1 = connection.cursor()
     def selectArticoli(self,c1):
         #LIBRERIA=Nome libreria IBM-I, FILE=Nome tabella 
         stringa=("select  cdar,   dsar, dssa, umba, decimal(csbc,11,2) from LIBRERIA.FILE ")
         try:
             c1.execute(stringa) 
             row = c1.fetchall()
         except Exception as e:
             print ("error")
         return row

 

Html

Il codice html contiene i collegamenti a boostrap e jquery per eseguire una ricerca nella pagina.
I delimitatori tra parentesi graffe {%….%} esprimono istruzioni(for,if,..).
I delimitatori tra parentesi graffe {{…}} esprimono le variabili.

Server Http

Utilizzo un semplice server wsgi python di nome waitress:
Per eseguire l’applicazione lanciare il seguente comando : python waitress_server.py.
L’indirizzo ip da inserire nel browser corrisponde alla macchina dove è stato lanciato il server http (pc,server Windows, server Linux,..)
A questo punto è sufficiente digitare nel browser l’indirizzo http://indirizzo_ip:8080/articoli e si vedrà il risultato finale!

 
waitress_server.py 

from waitress import serve
import  mainapp
serve(mainapp.app, host='0.0.0.0', port=8080)

Risultato finale

Il javascript di jquery esegue la ricerca su tutto l’html. Le classi boostrap rendono la pagina html responsive e moderna.
….ed ora buon divertimento e spazio alla creatività.

Related Posts
DB2 for i SQL – Stringhe – POSSTR-LOCATE-LOCATE_IN_STRING (IT)

Introduzione Spesso, nelle nostre applicazioni, abbiamo la necessità di lavorare con le stringhe di testo e l'SQL del DB2 può Read more

DB2 for i & SQL – FAQ & Howto (Part. 1) (IT)

Database DB2 e SQL ... forse lo strumento più potente e completo che abbiamo sulla piattaforma IBM i: ecco una Read more

Annuncio IBM i 7.4

Arriva direttamente con l'uovo di Pasqua questo annuncio IBM per le novità della versione IBM i 7.4, versione iNext secondo Read more

Generated Always Columns – Approfondimenti (IT)

Introduzione "Generated Always Column": sono colonne, campi, di una tabella il cui contenuto è controllato direttamente dal sistema ... e Read more

View Comments

Recent Posts

VsCode Extension: Bob Cozzi’s RPG IV to RPG Free Conversion

L’estensione “RPG IV to Free Format Conversion” sviluppata da Bob Cozzi (Cozzi Research) è pensata per semplificare la conversione di…

11 mesi ago

IBM i & SQL Tips #010 – Localizzare programmi nella Call Stack con STACK_INFO

Ciao a tutti, oggi voglio segnalarvi un altro interessante contributo di Massimo Duca, parte della sua ormai nota serie IBM…

11 mesi ago

Display file DDS Edit per VsCode, nuova preview.

Incuriosito da alcuni messaggi di Cristian Larsen su Linkedin (New Release - Display File DDS Edit v.0.10.1) ho voluto scaricare…

11 mesi ago

Project Bob: il nuovo strumento AI di IBM per sviluppo COBOL su IBM Z e RPG su IBM i

Ciao a tutti,oggi voglio segnalarvi un annuncio che potrebbe segnare una svolta per lo sviluppo applicativo su ambienti IBM: Project…

11 mesi ago

IBM i & SQL Tips #6: chiamare API REST e analizzare le risposte JSON con SQL

Voglio segnalarvi un nuovo articolo molto interessante di Massimo Duca nella serie IBM i & SQL Tips. In questo sesto…

12 mesi ago

Come funziona il passaggio di parametri a un programma IBM i (RPG / Cobol)

Ciao a tutti, voglio segnalarvi un post molto utile di Marco Riva sul suo sito Markonetools, in cui spiega in…

12 mesi ago