1. Prefazione
Il codice PDF di questo documento è disponibile |QUI|.
Gli esempi di questo documento sono disponibili |QUI|.
Questo documento propone un elenco di script Python in diversi ambiti:
- i fondamenti del linguaggio;
- la gestione dei database MySQL e PostgreSQL;
- la programmazione di rete TCP/ IP (protocolli HTTP, POP3, IMAP, SMTP);
- la programmazione web MVC con il framework FLASK;
- le architetture a tre livelli e la programmazione tramite interfacce;
Questo non è un corso esaustivo su Python, ma una raccolta di esempi destinati a sviluppatori che hanno già utilizzato un linguaggio di scripting come Perl, PHP, VBScript o per sviluppatori abituati a linguaggi tipizzati come Java o C# e che siano interessati a scoprire un linguaggio di scripting orientato agli oggetti. Questo documento è poco adatto a lettori che non hanno mai programmato o che hanno poca esperienza in materia.
Questo documento non è nemmeno una raccolta di «buone pratiche». Lo sviluppatore esperto potrebbe quindi ritenere che alcuni codici potrebbero essere scritti meglio. L’unico obiettivo di questo documento è fornire esempi a chi desidera avvicinarsi al linguaggio Python 3 e al framework Flask. Il lettore potrà poi approfondire il proprio apprendimento con altri documenti.
Gli script sono commentati e i risultati della loro esecuzione sono riportati. Talvolta vengono fornite spiegazioni aggiuntive. Il documento richiede una lettura attiva: per comprendere uno script, è necessario leggere sia il codice, sia i commenti, sia i risultati dell’esecuzione.
Gli esempi contenuti nel documento sono disponibili all'indirizzo |QUI|:

Il documento è un aggiornamento di un precedente documento pubblicato nel giugno 2011 |https://tahe.developpez.com/tutoriels-cours/python/|. Il documento del 2011 era stato realizzato con l'interprete Python 2.7. Da allora sono state rilasciate nuove versioni di Python 3.x. A febbraio 2020 siamo alla versione 3.8. Le versioni 3.x hanno introdotto una discontinuità nella portabilità tra le versioni: i codici che funzionavano con Python 2.7 potrebbero rivelarsi inutilizzabili con Python 3.x. Ciò vale in particolare per la scrittura in console. In Python 2.7 si può scrivere [print "toto"], mentre in 3.x è necessario scrivere [print("toto")]: occorre aggiungere le parentesi. Questa semplice modifica fa sì che i codici forniti con il documento del 2011 siano per lo più inutilizzabili direttamente con Python 3.x. È necessario modificarli.
Questo nuovo documento non si limita ad aggiornare i codici del 2011 per renderli eseguibili con Python 3.8:
- le sezioni sulla programmazione TCP-IP e sull’uso dei database hanno subito importanti modifiche;
- la sezione sulla programmazione web, che era solo un’introduzione, è ora un corso completo che utilizza il framework FLASK;
Per realizzare questo corso, ho seguito un approccio insolito: ho effettuato un porting del corso PHP [Introduction au langage PHP7 par l’exemple]. Non ho quindi seguito le strutture tradizionali dei corsi su Python o Flask. Volevo soprattutto capire come poter realizzare con Python 3 ciò che avevo fatto in PHP 7. Il risultato è che sono riuscito a rifare, in Python 3 / Flask, tutti gli esempi del corso PHP 7.
Questo documento potrebbe contenere errori o lacune. Il lettore può utilizzare il thread di discussione |forum| per segnalarli.
Il contenuto del documento è il seguente:
Capitolo | Cartella del codice | Contenuto |
Presentazione del corso | ||
Installazione di un ambiente di lavoro | ||
[bases] | Nozioni di base sul linguaggio Python – strutture del linguaggio – tipi di dati – funzioni – output in console – stringhe di formattazione – conversione dei tipi – liste – dizionari – espressioni regolari | |
[strings] | Notazione delle stringhe – metodi della classe <str> – codifica/decodifica delle stringhe in UTF-8 | |
[exceptions] | Gestione delle eccezioni | |
[fonctions] | Ambito delle variabili – Modalità di passaggio dei parametri – Utilizzo dei moduli – Il Python Path – Parametri con nome – Funzioni ricorsive | |
[fichiers] | Lettura/scrittura di un file di testo – gestione dei file codificati in UTF-8 – gestione dei file jSON | |
[impots/v01] | Versione 1 dell'esercizio pratico: calcolo dell'imposta sul reddito. L'applicazione è disponibile in 18 versioni – La versione 1 implementa una soluzione procedurale | |
[imports] | Gestione delle dipendenze di un’applicazione tramite importazione di moduli – viene presentato un metodo di gestione delle dipendenze – utilizzato in tutto il documento – gestione del Python Path | |
[impots/v02] | La versione 2 dell’applicazione riprende la versione 1 raggruppando tutte le costanti di configurazione in un file di configurazione che gestisce anche il Python Path | |
[impots/v03] | La versione 3 dell'applicazione riprende la versione 2 utilizzando funzioni incapsulate in un modulo – la gestione delle dipendenze avviene tramite configurazione – introduzione del file jSON per leggere i dati necessari al calcolo dell'imposta e scrivere i risultati dei calcoli | |
[classes/01] | Classi – ereditarietà – metodi e proprietà – getter / setter – costruttore – proprietà [__dict__] | |
[classes/02] | Presentazione delle classi [BaseEntity] e [MyException] utilizzate nel resto del documento – [BaseEntity] facilita le conversioni oggetto / dizionario | |
[troiscouches] | Architettura a livelli e programmazione tramite interfacce. Questo capitolo presenta i metodi di programmazione utilizzati nel resto del documento | |
[impots/v04] | Versione 4 dell’applicazione – questa versione implementa una soluzione con un’architettura a livelli, la programmazione tramite interfacce e l’utilizzo di classi derivate da [BaseEntity] e [MyException] | |
[databases/mysql] | Installazione di SGBD MySQL – connessione a un database – creazione di una tabella – esecuzione di comandi SQL SELECT, UPDATE, DELETE, INSERT – transazione – query SQL configurate | |
[databases/postgresql] | Installazione di SGBD PostgreSQL – connessione a un database – creazione di una tabella – esecuzione di comandi SQL SELECT, UPDATE, DELETE, INSERT – transazione – query SQL configurate | |
[databases/anysgbd] | Scrittura di codice indipendente da SGBD | |
[databases/sqlalchemy] | L’ORM (Object Relational Mapper) SqlAlchemy – un ORM consente di lavorare in modo unificato con diversi SGBD - mappatura di classi / tabelle SQL – operazioni sulle classi immagine delle tabelle SQL | |
[impots/v05] | Versione 5 dell’applicazione per il calcolo delle imposte – Utilizzo dell’architettura a livelli della versione 04 e dellaORM SqlAlchemy per lavorare con SGBD MySQL e PostgreSQL | |
[inet] | Programmazione Internet – protocollo TCP / IP (Transfer Control Protocol / Internet Protocol) – protocolli HTTP (HyperText Transfer Protocol) – SMTP (Simple Mail Transfer Protocol) – POP (Post Office Protocol) – IMAP (Internet Message Access Protocol) | |
[flask] | Servizi web con il framework web Flask – visualizzazione di una pagina HTML – servizio web jSON – richieste GET e POST – gestione di una sessione web | |
[impots/http-servers/01] [impots/http-clients/01] | Versione 6 dell’esercizio applicativo - Creazione di un servizio web jSON per il calcolo delle imposte con un’architettura multistrato - Scrittura di un client web per questo server con un’architettura multistrato – programmazione client/server – utilizzo del modulo [requests] | |
[impots/http-servers/02] [impots/http-clients/02] | Versione 7 dell’applicazione – la versione 6 è stata migliorata: client e server sono multithread – utilità [Logger] per registrare gli scambi client/server – [SendMail] per inviare un’e-mail all’amministratore dell’applicazione | |
[impots/http-servers/03] [impots/http-clients/03] | Versione 8 dell’esercizio pratico – la versione 7 è stata migliorata grazie all’uso di una sessione web | |
[xml] | Gestione del XML (eXtended Markup Language) con il modulo [xmltodict] | |
[impots/http-servers/04] [impots/http-clients/04] | Versione 9 dell’esercizio applicativo – la versione 8 è stata modificata per consentire lo scambio client/server in XML; | |
[impots/http-servers/05] [impots/http-clients/05] | Versione 10 dell'esercizio applicativo – invece di elaborare N contribuenti tramite N richieste GET, si utilizza un'unica richiesta POST con i N contribuenti nel corpo della richiesta POST | |
[impots/http-servers/06] [impots/http-clients/06] | Versione 11 dell'esercizio pratico – l'architettura client/server dell'applicazione viene modificata: il livello [métier] passa dal server al client | |
[impots/http-servers/07] | Versione 12 dell’esercizio applicativo – questa versione implementa un server MVC (Model – View – Controller) che fornisce, a richiesta del client, indifferentemente jSON, XML e HTML. Questo capitolo implementa le versioni jSON e XML del server | |
[impots/http-clients/07] | Implementazione dei client jSON e XML del server MVC della versione 12 | |
[impots/http-servers/07] | Implementazione del server HTML della versione 12 – utilizzo del framework CSS Bootstrap – | |
[impots/http-servers/08] | Versione 13 dell'esercizio pratico - Rifattorizzazione del codice della versione 12 – gestione della sessione con il modulo [flask_session] e un server Redis – utilizzo di password crittografate | |
[impots/http-servers/09] [impots/http-clients/09] | Versione 14 dell'esercizio pratico – implementazione di URL con un token CSRF (Cross Site Request Forgery) | |
[impots/http-servers/10] | Versione 15 dell’esercizio pratico – rifattorizzazione del codice della versione 14 per gestire due tipi di azioni: ASV (Action Show View), che servono solo a visualizzare una vista senza modificare lo stato del server, ADS (Azione Do Something) che eseguono un’operazione che modifica lo stato del server – queste azioni terminano tutte con un reindirizzamento verso un’azione ASV – ciò consente di gestire correttamente gli aggiornamenti della pagina nel browser del client | |
[impots/http-servers/11] | Versione 16 dell’applicazione – gestione delle URL con prefisso | |
[impots/http-servers/12] | Versione 17 dell’applicazione – migrazione della versione 16 su un server Apache / Windows | |
[impots/http-servers/13] | Versione 18 dell'applicazione – corregge un'anomalia della versione 17 |
La versione finale dell’esercizio applicativo è un’applicazione client/server per il calcolo delle imposte con la seguente architettura:

Il livello [web] sopra indicato è implementato con un'architettura MVC:

Il contenuto del documento è denso. Il lettore che lo leggerà fino in fondo avrà una buona visione della programmazione web MVC in Python / Flask e, oltre a ciò, una buona visione della programmazione web MVC in altri linguaggi.
Il lettore che preferisce vedere il codice, testarlo e modificarlo piuttosto che leggere un corso potrà procedere come segue:
-
installare un ambiente di lavoro:
- un interprete Python;
- la IDE PyCharm Community;
- Laragon (server Apache, SGBD MySQL, server Redis);
- il SGBD PostgreSQL;
- il client HTTP Postman;
- il server di posta hMailServer;
-
esplora il codice degli esempi |https://tahe.developpez.com/tutoriels-cours/python-flask-2020/documents/python-flask-2020.rar|:
- in ogni cartella è presente un file [README.md] che collega la cartella a un capitolo del corso e ne riassume il contenuto:

Il file [README.md] si presenta così:

È improbabile che il lettore legga l’intero corso:
- il lettore principiante potrà leggere i capitoli da 1 a 15 e fermarsi lì. Potrà poi dedicare del tempo a scrivere i propri script Python prima di tornare a questo corso;
- il lettore che possiede le basi di Python e desidera avvicinarsi ai database e all’ORM (Object Relational Mapper) [sqlalchemy] potrà limitarsi ai capitoli dal 16 al 20;
- il lettore che desideri avvicinarsi alla programmazione web (HTTP, SMTP, POP3, IMAP) potrà leggere il capitolo 21. Questo capitolo è piuttosto complesso e presenta script avanzati. Può essere letto a due livelli:
- per scoprire i protocolli di Internet;
- per ottenere script che sfruttano tali protocolli;
- il lettore che possiede le nozioni di base di Python e desidera avvicinarsi alla programmazione web con il framework Flask potrà leggere il capitolo 22;
- il lettore che desidera approfondire la programmazione web con il framework Flask potrà studiare i capitoli dal 23 al 38. In essi si realizzano applicazioni client/server sempre più complesse, nonché un’applicazione HTML/Python seguendo il modello di sviluppo MVC (Modello – Vista – Controller). Questa applicazione viene sviluppata nel capitolo 32. Ci si può fermare qui. I capitoli successivi introducono modifiche non fondamentali;
Serge Tahé, settembre 2020