Skip to content

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|:

Image

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:

Image

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

Image

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:

  • Esplora il codice negli esempi |QUI|:

Image

  • 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:

Image

È 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