1. Prefazione
Il PDF di questo documento è disponibile |QUI|.
Gli esempi contenuti in questo documento sono disponibili |QUI|.
Questo documento fornisce un elenco di script Python in vari campi:
- i fondamenti del linguaggio;
- gestione di database MySQL e PostgreSQL;
- programmazione di rete TCP/IP (protocolli HTTP, POP3, IMAP, SMTP);
- programmazione web MVC con il framework FLASK;
- architetture a tre livelli e programmazione basata su interfacce;
Questo non è un corso completo su Python, ma una raccolta di esempi pensata per sviluppatori che hanno già utilizzato un linguaggio di scripting come Perl, PHP o VBScript, oppure per sviluppatori abituati a linguaggi tipizzati come Java o C# che sono interessati a scoprire un linguaggio di scripting orientato agli oggetti. Questo documento non è adatto a lettori con poca o nessuna esperienza di programmazione.
Né questo documento è una raccolta di "best practice". Gli sviluppatori esperti potrebbero ritenere che parte del codice potrebbe essere scritto in modo più elegante. L'unico scopo di questo documento è fornire esempi a chi desidera imparare Python 3 e il framework Flask. Potranno poi approfondire la loro comprensione utilizzando altre risorse.
Gli script sono commentati e vengono mostrati i risultati della loro esecuzione. A volte vengono fornite spiegazioni aggiuntive. Questo documento richiede una lettura attiva: per comprendere uno script, è necessario leggere il suo codice, i suoi commenti e i risultati della sua esecuzione.
Gli esempi in questo documento sono disponibili |QUI|:

Questo documento è un aggiornamento di un documento precedente pubblicato nel giugno 2011 |https://tahe.developpez.com/tutoriels-cours/python/|. Il documento del 2011 è stato realizzato utilizzando l'interprete Python 2.7. Da allora sono state rilasciate le versioni Python 3.x. A febbraio 2020, la versione attuale è la 3.8. Le versioni 3.x hanno introdotto una discontinuità nella compatibilità tra le versioni: il codice che funziona con Python 2.7 potrebbe non funzionare con Python 3.x. Ciò vale in particolare per l'output della console. In 2.7, è possibile scrivere [print "toto"], mentre in 3.x è necessario scrivere [print("toto")]: le parentesi sono obbligatorie. Questa semplice modifica implica che la maggior parte del codice fornito con il documento del 2011 non è direttamente utilizzabile con Python 3.x. Deve essere modificato.
Questo nuovo documento non si limita ad aggiornare il codice del 2011 per renderlo eseguibile con Python 3.8:
- le sezioni sulla programmazione TCP/IP e sull'uso dei database hanno subito modifiche significative;
- la sezione sulla programmazione web, che in precedenza era solo un'introduzione, è ora un corso completo che utilizza il framework Flask;
Per realizzare questo corso, ho adottato un approccio non convenzionale: ho adattato il corso su PHP [Introduzione a PHP 7 attraverso esempi]. Non ho quindi seguito le strutture tradizionali dei corsi su Python o Flask. Soprattutto, volevo capire come poter realizzare in Python 3 ciò che avevo fatto in PHP 7. Il risultato è che sono riuscito a ricreare, in Python 3 / Flask, tutti gli esempi del corso su PHP 7.
Questo documento potrebbe contenere errori o omissioni. I lettori possono utilizzare il thread di discussione |forum| per segnalarli.
Il contenuto del documento è il seguente:
Capitolo | Repository del codice | Indice |
Panoramica del corso | ||
Configurazione dell'ambiente di lavoro | ||
[Nozioni di base] | Nozioni di base sul linguaggio Python – strutture del linguaggio – tipi di dati – funzioni – output della console – stringhe di formattazione – conversione dei tipi – liste – dizionari – espressioni | |
[stringhe] | Notazione stringa – metodi della classe <str> – codifica/decodifica stringhe in UTF-8 | |
[eccezioni] | Gestione delle eccezioni | |
[funzioni] | Ambito delle variabili – Parametri Passaggio – Utilizzo dei moduli – Il percorso Python – Parametri – Funzioni Funzioni | |
[file] | Lettura/scrittura di un file di testo – gestione dei file con codifica UTF-8 – gestione dei file JSON | |
[taxes/v01] | Versione 1 dell'applicazione Esercizio: calcolo dell'imposta sul reddito . L'applicazione è disponibile in 18 versioni – La versione 1 implementa una soluzione procedurale | |
[importa] | Gestione delle delle applicazioni tramite l'importazione moduli – viene presentato un viene presentato un metodo di gestione delle dipendenze – viene utilizzato in tutto il documento – gestione del percorso Python | |
[impots/v02] | La versione 2 dell'applicazione si basa sulla versione 1 raggruppando tutte le costanti di configurazione in un file di configurazione che gestisce il percorso Python | |
[import/v03] | La versione 3 dell'applicazione si basa sulla versione 2 utilizzando funzioni incapsulate in un modulo — la gestione delle dipendenze gestione delle dipendenze è gestita tramite configurazione — l'introduzione di un file JSON per leggere i dati necessari per il calcolo delle imposte e scrivere i risultati del calcolo | |
[classi/01] | Classi – ereditarietà – metodi e proprietà – getter/setter – costruttore – [__dict__] proprietà | |
[classi/02] | Introduzione alle classi [BaseEntity] e [MyException] utilizzate nel resto del documento – [BaseEntity] facilita le conversioni oggetto/dizionario . | |
[tre-livelli] | Architettura a livelli e programmazione basata sull'interfaccia. Questo capitolo presenta i metodi di programmazione utilizzati nel resto del documento | |
[taxes/v04] | Versione 4 dell'applicazione – questa versione implementa una soluzione con un'architettura a livelli, programmazione basata su interfacce e l'uso di classi derivate da [BaseEntity] e [MyException] | |
[databases/mysql] | Installazione del DBMS MySQL – connessione a un database – creazione di una tabella – esecuzione di SELECT, UPDATE, DELETE, e INSERT – transazioni – SQL | |
[databases/postgresql] | Installazione del DBMS PostgreSQL – connessione a un database – creazione di una tabella – esecuzione di SELECT, UPDATE, DELETE, e INSERT – transazioni – query SQL SQL | |
[databases/anydbms] | Scrivere codice indipendente dal DBMS | |
[databases/sqlalchemy] | L'ORM (Object- Mapper) di SqlAlchemy – un ORM consente un approccio unificato al lavorare con diversi DBMS – mappando le classi alle tabelle SQL – operazioni sulle classi che rappresentano tabelle SQL | |
[taxes/v05] | Versione 5 dell'applicazione per il calcolo delle imposte – Utilizzo dell'architettura a livelli della versione 04 e l'ORM SqlAlchemy per funzionare con i DBMS MySQL e PostgreSQL DBMS | |
[inet] | Programmazione Web – Protocollo TCP/IP (Protocollo di controllo della trasmissione / Protocollo Internet) – Protocolli HTTP (HyperText ) – SMTP (Simple Mail Transfer Protocol) – POP (Post Office Protocol) – IMAP (Internet Message Access ) | |
[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] [taxes/http-clients/01] | Versione 6 dell'applicazione Esercizio – Creazione di un servizio web JSON per il calcolo delle imposte con un' architettura multistrato – Scrittura un client web per questo server con un architettura multistrato – programmazione client/server – utilizzo del modulo [requests] | |
[taxes/http-servers/02] [tasse/client-http/02] | Versione 7 dell'applicazione Esercizio – La versione 6 è stata migliorata: il client e il server sono multithread – [Logger] utilità per registrare gli scambi client/server scambi client/server – [SendMail] per inviare un'e-mail all'amministratore dell'applicazione amministratore dell'applicazione | |
[taxes/http-servers/03] [tasse/client-http/03] | Versione 8 dell'applicazione Esercizio – La versione 7 è stata migliorata grazie all'uso di una sessione web | |
[xml] | Gestione del linguaggio XML (eXtended Markup Language) con il modulo [xmltodict] | |
[taxes/http-servers/04] [impots/http-clients/04] | Versione 9 dell'applicazione Esercizio – la versione 8 viene modificata per includere gli scambi client/server in XML; | |
[taxes/http-servers/05] [tasse/client-http/05] | Versione 10 dell'applicazione Esercizio – invece di elaborare N contribuenti tramite N richieste GET, viene utilizzata una singola richiesta POST viene utilizzata con i N contribuenti nel corpo della richiesta POST corpo | |
[taxes/http-servers/06] [tasse/client-http/06] | Versione 11 dell'applicazione Esercizio – l'architettura client/server dell'applicazione è modificata: il livello [aziendale] viene spostato dal server al client | |
[taxes/http-servers/07] | Versione 12 dell'applicazione Esercizio – questa versione implementa un server MVC (Model–View– Controller) che fornisce JSON, XML e HTML in modo intercambiabile, a seconda richiesta del client. Questo capitolo implementa le versioni JSON e XML del server | |
[impots/http-clients/07] | Implementazione dei client JSON e XML per il server MVC nella versione 12 | |
[impots/http-servers/07] | Implementazione del server HTML nella versione 12 – utilizzando il framework CSS Bootstrap – | |
[impots/http-servers/08] | Versione 13 dell'applicazione – Riscrittura del codice dalla versione 12 – gestione delle sessioni utilizzando il modulo [flask_session] e un server Redis – utilizzando password | |
[importazioni/server-http/09] [importazioni/client-http/09] | Versione 14 dell'applicazione Esercizio – Implementazione degli URL con un token CSRF (Cross-Site Request ) | |
[impots/http-servers/10] | Versione 15 dell'applicazione Esercizio – rifattorizzazione del codice dalla versione 14 per gestire due tipi di azioni: ASV (Action Show View), che vengono utilizzate solo per visualizzare una vista senza modificare lo stato del server, e ADS (Action Do Something), che eseguono un'azione che modifica lo stato del server: queste azioni terminano tutte con un reindirizzamento a un'azione ASV: ciò consente una corretta gestione dell'aggiornamento delle pagine nel browser del client | |
[impots/http-servers/11] | Versione 16 dell'applicazione – Gestione degli URL con prefissi | |
[impots/http-servers/12] | Versione 17 dell'applicazione – porting della versione 16 su un server Apache/Windows | |
[impots/http-servers/13] | Versione 18 dell'applicazione – corregge un bug presente nella versione 17 |
La versione finale dell'esercizio sull'applicazione è un'applicazione client/server per il calcolo delle imposte con la seguente architettura:

Il livello [web] superiore è implementato utilizzando un'architettura MVC:

Il contenuto di questo documento è denso. I lettori che lo seguiranno fino alla fine acquisiranno una solida comprensione della programmazione web MVC in Python/Flask e, oltre a ciò, una solida comprensione della programmazione web MVC in altri linguaggi.
I lettori che preferiscono vedere il codice, testarlo e modificarlo piuttosto che leggere una lezione possono procedere come segue:
- Configurare un ambiente di sviluppo:
- un interprete Python;
- l'IDE PyCharm Community;
- Laragon (server Apache, DBMS MySQL, server Redis);
- il database PostgreSQL;
- il client HTTP Postman;
- il server di posta hMailServer;
- Esplora il codice negli esempi |QUI|:

- 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] ha questo aspetto:

È improbabile che il lettore legga l'intero corso:
- Un lettore principiante potrebbe leggere i capitoli da 1 a 15 e fermarsi lì. Potrebbe quindi dedicare del tempo a scrivere i propri script Python prima di tornare a questo corso;
- I lettori con una conoscenza di base di Python che desiderano approfondire i database e l'ORM (Object Relational Mapper) [SQLAlchemy] potrebbero trovare sufficienti i capitoli dal 16 al 20;
- I lettori che desiderano imparare la programmazione web (HTTP, SMTP, POP3, IMAP) possono leggere il capitolo 21. Questo capitolo è piuttosto complesso e tratta script avanzati. Può essere letto su due livelli:
- per imparare i protocolli Internet;
- per ottenere script che utilizzano questi protocolli;
- I lettori con una conoscenza di base di Python che desiderano imparare la programmazione web utilizzando il framework Flask dovrebbero leggere il capitolo 22;
- I lettori che desiderano approfondire la programmazione web con il framework Flask possono studiare i capitoli dal 23 al 38. Questi capitoli trattano lo sviluppo di applicazioni client/server sempre più complesse, nonché un'applicazione HTML/Python che segue il modello di sviluppo MVC (Model–View–Controller). Questa applicazione viene sviluppata nel capitolo 32. È possibile fermarsi qui. I capitoli seguenti introducono modifiche non fondamentali;
Serge Tahé, settembre 2020