1. Voorwoord
De PDF van dit document is beschikbaar |HIER|.
De voorbeelden in dit document zijn beschikbaar |HIER|.
Dit document bevat een lijst met Python-scripts op verschillende gebieden:
- de basisbeginselen van de taal;
- databasebeheer MySQL en PostgreSQL;
- netwerkprogrammering TCP/ IP (protocollen HTTP, POP3, IMAP, SMTP);
- webprogrammering MVC met het FLASK-framework;
- drielaagse architecturen en programmeren via interfaces;
Dit is geen uitgebreide Python-cursus, maar een verzameling voorbeelden bedoeld voor ontwikkelaars die al ervaring hebben met een scripttaal zoals Perl, PHP, VBScript of voor ontwikkelaars die gewend zijn aan getypeerde talen zoals Java of C# en die graag een objectgeoriënteerde scripttaal willen ontdekken. Dit document is niet erg geschikt voor lezers die nog nooit of nauwelijks hebben geprogrammeerd.
Dit document is evenmin een verzameling van „best practices“. De ervaren ontwikkelaar zal dan ook wellicht vinden dat bepaalde stukken code beter geschreven zouden kunnen worden. Dit document heeft als enig doel voorbeelden te geven aan iemand die kennis wil maken met de taal Python 3 en het Flask-framework. Vervolgens kan de lezer zijn of haar kennis verdiepen met behulp van andere documenten.
De scripts zijn voorzien van commentaar en de resultaten van de uitvoering worden weergegeven. Soms worden aanvullende uitleg gegeven. Het document vereist een actieve lezing: om een script te begrijpen, moet men zowel de code, het commentaar als de uitvoeringsresultaten lezen.
De voorbeelden uit dit document zijn beschikbaar op |HIER|:

Het document is een update van een ouder document dat in juni 2011 verscheen |https://tahe.developpez.com/tutoriels-cours/python/|. Het document uit 2011 was opgesteld met de Python 2.7-interpreter. Sindsdien zijn er nieuwe Python-versies verschenen: 3.x. In februari 2020 is de versie 3.8. De 3.x-versies hebben geleid tot een breuk in de compatibiliteit tussen versies: code die onder Python 2.7 werkt, kan onder Python 3.x onbruikbaar blijken te zijn. Dit geldt met name voor het schrijven naar de console. In 2.7 kun je [print "toto"] schrijven, terwijl je in 3.x [print("toto")] moet schrijven: je moet haakjes toevoegen. Door deze eenvoudige wijziging zijn de codes die bij het document uit 2011 zijn geleverd, grotendeels niet direct bruikbaar met Python 3.x. Ze moeten worden aangepast.
Dit nieuwe document beperkt zich niet tot het bijwerken van de codes uit 2011 zodat ze uitvoerbaar zijn met Python 3.8:
- de hoofdstukken over TCP-IP-programmering en het gebruik van databases hebben ingrijpende wijzigingen ondergaan;
- het hoofdstuk over webprogrammering, dat voorheen slechts een inleiding was, is nu een volledige cursus waarin gebruik wordt gemaakt van het FLASK-framework;
Om deze cursus op te zetten, heb ik een ongebruikelijke aanpak gevolgd: ik heb de cursus PHP [Introduction au langage PHP7 par l’exemple] geport. Ik heb dus niet de traditionele structuren van Python- of Flask-cursussen gevolgd. Ik wilde vooral weten hoe ik met Python 3 kon doen wat ik in PHP 7 had gedaan. Het resultaat is dat ik alle voorbeelden uit de cursus PHP 7 opnieuw heb kunnen maken in Python 3 / Flask.
Dit document kan fouten of onvolledigheden bevatten. De lezer kan de discussiestroom |forum| gebruiken om deze te melden.
De inhoud van het document is als volgt:
Hoofdstuk | Codemap | Inhoud |
Presentatie van de cursus | ||
Een werkomgeving installeren | ||
[bases] | De basis van de programmeertaal Python – taalstructuren – gegevenstypen – functies – console-uitvoer – opmaakreeksen – typeconversie – lijsten – woordenboeken – reguliere expressies | |
[strings] | Notatie van tekenreeksen – methoden van de klasse <str> – codering/decodering van tekenreeksen in UTF-8 | |
[exceptions] | Uitzonderingsafhandeling | |
[fonctions] | Bereik van variabelen – parameterdoorgave – modules gebruiken – het Python-pad – benoemde parameters – recursieve functies | |
[fichiers] | Een tekstbestand lezen/schrijven – omgaan met bestanden die zijn gecodeerd in UTF-8 – omgaan met jSON-bestanden | |
[impots/v01] | Versie 1 van de praktijkopdracht: een berekening van de inkomstenbelasting. De toepassing bestaat uit 18 versies – Versie 1 implementeert een procedurele oplossing | |
[imports] | Beheer van de afhankelijkheden van een toepassing door het importeren van modules – er wordt een methode voor het beheer van afhankelijkheden gepresenteerd – deze wordt in het hele document gebruikt – beheer van het Python-pad | |
[impots/v02] | Versie 2 van de applicatie bouwt voort op versie 1 door alle configuratieconstanten samen te brengen in een configuratiebestand dat ook het Python-pad beheert | |
[impots/v03] | Versie 3 van de applicatie bouwt voort op versie 2 door gebruik te maken van functies die in een module zijn ingekapseld – het beheer van de afhankelijkheden gebeurt via de configuratie – introductie van het bestand jSON om de gegevens te lezen die nodig zijn voor de berekening van de belasting en om de resultaten van de berekeningen op te slaan | |
[classes/01] | Klassen – overerving – methoden en eigenschappen – getters / setters – constructor – eigenschap [__dict__] | |
[classes/02] | Overzicht van de klassen [BaseEntity] en [MyException] die in de rest van het document worden gebruikt – [BaseEntity] vergemakkelijkt de conversies tussen objecten en woordenboeken | |
[troiscouches] | Laagarchitectuur en programmeren via interfaces. Dit hoofdstuk presenteert de programmeermethoden die in de rest van het document worden gebruikt | |
[impots/v04] | Versie 4 van de applicatie – deze versie implementeert een oplossing met een gelaagde architectuur, programmeren via interfaces en het gebruik van klassen die zijn afgeleid van [BaseEntity] en [MyException] | |
[databases/mysql] | Installatie van SGBD MySQL – verbinding met een database – aanmaken van een tabel – uitvoeren van opdrachten SQL SELECT, UPDATE, DELETE, INSERT – transactie – geconfigureerde query’s SQL | |
[databases/postgresql] | Installatie van SGBD PostgreSQL – verbinding met een database – aanmaken van een tabel – uitvoeren van opdrachten SQL SELECT, UPDATE, DELETE, INSERT – transactie – geconfigureerde query’s SQL | |
[databases/anysgbd] | Onafhankelijk van de SGBD schrijven van code | |
[databases/sqlalchemy] | De ORM (Object Relational Mapper) SqlAlchemy – een ORM maakt het mogelijk om op een uniforme manier te werken met verschillende SGBD - mapping van klassen / tabellen SQL – bewerkingen op de beeldklassen van de tabellen SQL | |
[impots/v05] | Versie 5 van de belastingberekeningsapplicatie – Gebruik van de gelaagde architectuur van versie 04 en van deORM SqlAlchemy om te werken met de SGBD MySQL en PostgreSQL | |
[inet] | Internetprogrammering – protocol TCP / IP (Transfer Control Protocol / Internet Protocol) – protocollen HTTP (HyperText Transfer Protocol) – SMTP (Simple Mail Transfer Protocol) – POP (Post Office Protocol) – IMAP (Internet Message Access Protocol) | |
[flask] | Webservices met het Flask-webframework – een pagina weergeven HTML – webservice jSON – verzoeken GET en POST – beheer van een websessie | |
[impots/http-servers/01] [impots/http-clients/01] | Versie 6 van de praktijkopdracht – Aanmaken van een webservice jSON voor belastingberekening met een meerlaagse architectuur – Schrijven van een webclient voor deze server met een meerlaagse architectuur – client/server-programmering – gebruik van de module [requests] | |
[impots/http-servers/02] [impots/http-clients/02] | Versie 7 van de oefenapplicatie – versie 6 is verbeterd: de client en de server zijn multithreaded – hulpprogramma's [Logger] voor het loggen van client/server-uitwisselingen – [SendMail] voor het verzenden van een e-mail naar de beheerder van de applicatie | |
[impots/http-servers/03] [impots/http-clients/03] | Versie 8 van de applicatieoefening – versie 7 is verbeterd door het gebruik van een websessie | |
[xml] | Beheer van XML (eXtended Markup Language) met de module [xmltodict] | |
[impots/http-servers/04] [impots/http-clients/04] | Versie 9 van de toepassingsopdracht – versie 8 is aangepast om client/server-uitwisselingen in XML mogelijk te maken; | |
[impots/http-servers/05] [impots/http-clients/05] | Versie 10 van de praktijkopdracht – in plaats van N belastingplichtigen te verwerken via N verzoeken GET, wordt één enkel verzoek POST gebruikt met de N belastingplichtigen in de hoofdtekst van POST | |
[impots/http-servers/06] [impots/http-clients/06] | Versie 11 van de praktijkopdracht – de client/server-architectuur van de applicatie is gewijzigd: de laag [métier] is verplaatst van de server naar de client | |
[impots/http-servers/07] | Versie 12 van de toepassingsopdracht – deze versie implementeert een MVC-server (Model – View – Controller) die, op verzoek van de client, naar keuze jSON, XML of HTML levert. In dit hoofdstuk worden de versies jSON en XML van de server geïmplementeerd | |
[impots/http-clients/07] | Implementatie van de clients jSON en XML van de server MVC van versie 12 | |
[impots/http-servers/07] | Implementatie van de server HTML van versie 12 – gebruik van het CSS Bootstrap-framework – | |
[impots/http-servers/08] | Versie 13 van de praktijkopdracht – Refactoring van de code uit versie 12 – sessiebeheer met de module [flask_session] en een Redis-server – gebruik van versleutelde wachtwoorden | |
[impots/http-servers/09] [impots/http-clients/09] | Versie 14 van de praktijkopdracht – implementatie van URL met een token CSRF (Cross Site Request Forgery) | |
[impots/http-servers/10] | Versie 15 van de praktijkopdracht – herstructurering van de code uit versie 14 om twee soorten acties te verwerken: ASV (Action Show View), die alleen dienen om een weergave te tonen zonder de toestand van de server te wijzigen, ADS (actie ‘Do Something’), die een actie uitvoeren die de status van de server wijzigt – deze acties eindigen allemaal met een omleiding naar een actie ASV – hierdoor kunnen paginavernieuwingen in de browser van de klant correct worden afgehandeld | |
[impots/http-servers/11] | Versie 16 van de applicatie – beheer van URL met voorvoegsel | |
[impots/http-servers/12] | Versie 17 van de applicatie – migratie van versie 16 naar een Apache/Windows-server | |
[impots/http-servers/13] | Versie 18 van de applicatie – verhelpt een fout in versie 17 |
De definitieve versie van de applicatieopdracht is een client/server-applicatie voor belastingberekening met de volgende architectuur:

De bovenstaande laag [web] is geïmplementeerd met een architectuur MVC:

De inhoud van het document is compact. De lezer die het tot het einde doorneemt, krijgt een goed inzicht in MVC-webprogrammering in Python/Flask en daarnaast een goed inzicht in MVC-webprogrammering in andere talen.
De lezer die liever code bekijkt, test en aanpast in plaats van een cursus te lezen, kan als volgt te werk gaan:
-
een ontwikkelomgeving installeren:
- een Python-interpreter;
- de IDE PyCharm Community;
- Laragon (Apache-server, SGBD MySQL, Redis-server);
- de SGBD PostgreSQL;
- de Postman-client HTTP;
- de e-mailserver hMailServer;
-
de voorbeeldcode bekijken |https://tahe.developpez.com/tutoriels-cours/python-flask-2020/documents/python-flask-2020.rar|:
- in elke map bevindt zich een bestand [README.md] dat de map koppelt aan een hoofdstuk van de cursus en de inhoud ervan samenvat:

Het bestand [README.md] ziet er als volgt uit:

Het is onwaarschijnlijk dat de lezer de hele cursus doorneemt:
- een beginnende lezer zal wellicht de hoofdstukken 1 tot en met 15 lezen en het daarbij laten. Vervolgens kan hij tijd besteden aan het schrijven van zijn eigen Python-scripts, voordat hij terugkeert naar deze cursus;
- de lezer die de basis van Python beheerst en zich wil verdiepen in databases en de ORM (Object Relational Mapper) [sqlalchemy], kan volstaan met de hoofdstukken 16 tot en met 20;
- de lezer die zich wil verdiepen in internetprogrammering (HTTP, SMTP, POP3, IMAP) kan hoofdstuk 21 lezen. Dit hoofdstuk is vrij complex en bevat geavanceerde scripts. Je kunt het op twee niveaus lezen:
- om de internetprotocollen te ontdekken;
- om scripts te leren die gebruikmaken van deze protocollen;
- de lezer die de basis van Python beheerst en kennis wil maken met webprogrammering met het Flask-framework, kan hoofdstuk 22 lezen;
- de lezer die zich verder wil verdiepen in webprogrammering met het Flask-framework, kan de hoofdstukken 23 tot en met 38 bestuderen. Daarin worden steeds complexere client/server-toepassingen gebouwd, evenals een HTML/Python-toepassing volgens het MVC-ontwikkelingsmodel (Model – View – Controller). Deze applicatie wordt in hoofdstuk 32 ontwikkeld. Hier kan men stoppen. De volgende hoofdstukken bevatten geen fundamentele wijzigingen;
Serge Tahé, september 2020