Skip to content

1. Vorwort

Die Datei PDF dieses Dokuments ist verfügbar |HIER|.

Die Beispiele in diesem Dokument sind unter |HIER| verfügbar.

Dieses Dokument enthält eine Liste von Python-Skripten aus verschiedenen Bereichen:

  • die Grundlagen der Sprache;
  • Datenbankverwaltung MySQL und PostgreSQL;
  • Netzwerkprogrammierung TCP/ IP (Protokolle HTTP, POP3, IMAP, SMTP);
  • Webprogrammierung MVC mit dem Framework FLASK;
  • Dreischichtarchitekturen und die Programmierung über Schnittstellen;

Dies ist kein umfassender Python-Kurs, sondern eine Sammlung von Beispielen für Entwickler, die bereits Erfahrung mit einer Skriptsprache wie Perl, PHP, VBScript verwendet haben oder an typisierte Sprachen wie Java oder C# gewöhnt sind und daran interessiert sind, eine objektorientierte Skriptsprache kennenzulernen. Dieses Dokument ist für Leser, die noch nie oder nur wenig programmiert haben, kaum geeignet.

Dieses Dokument ist auch keine Sammlung von „Best Practices“. Erfahrene Entwickler werden daher möglicherweise feststellen, dass bestimmte Codeabschnitte besser geschrieben werden könnten. Das einzige Ziel dieses Dokuments ist es, jemandem, der sich in die Sprache Python 3 und das Flask-Framework einarbeiten möchte, Beispiele an die Hand zu geben. Anschließend kann der Leser sein Wissen anhand anderer Dokumente vertiefen.

Die Skripte sind kommentiert und die Ergebnisse ihrer Ausführung werden wiedergegeben. Manchmal werden zusätzliche Erläuterungen gegeben. Das Dokument erfordert aktives Lesen: Um ein Skript zu verstehen, muss man sowohl den Code als auch die Kommentare und die Ausführungsergebnisse lesen.

Die Beispiele des Dokuments sind unter der Adresse |HIER| verfügbar:

Image

Das Dokument ist eine Aktualisierung eines älteren Dokuments, das im Juni 2011 erschienen ist |https://tahe.developpez.com/tutoriels-cours/python/|. Das Dokument aus dem Jahr 2011 wurde mit dem Python-Interpreter 2.7 erstellt. Seitdem sind neue Python-Versionen (3.x) erschienen. Im Februar 2020 ist die Version 3.8 aktuell. Die Versionen 3.x haben zu einer Unterbrechung der Portabilität zwischen den Versionen geführt: Code, der unter Python 2.7 läuft, kann unter Python 3.x unbrauchbar sein. Dies gilt insbesondere für die Konsolenausgabe. In Version 2.7 kann man [print "toto"] schreiben, während man in Version 3.x [print("toto")] schreiben muss: Es müssen Klammern gesetzt werden. Diese einfache Änderung führt dazu, dass die im Dokument von 2011 bereitgestellten Codes größtenteils nicht direkt mit Python 3.x verwendet werden können. Sie müssen angepasst werden.

Dieses neue Dokument beschränkt sich nicht darauf, die Codes aus dem Jahr 2011 so zu aktualisieren, dass sie mit Python 3.8 ausgeführt werden können:

  • Die Abschnitte zur Programmierung mit TCP-IP und zur Verwendung von Datenbanken wurden erheblich überarbeitet;
  • der Abschnitt über Webprogrammierung, der zuvor nur eine Einführung war, ist nun ein vollständiger Kurs, der das Framework FLASK nutzt;

Bei der Erstellung dieses Kurses bin ich ungewöhnlich vorgegangen: Ich habe den Kurs PHP [Introduction au langage PHP7 par l’exemple] portiert. Ich habe mich also nicht an die traditionellen Strukturen von Python- oder Flask-Kursen gehalten. Ich wollte vor allem herausfinden, wie ich mit Python 3 das umsetzen kann, was ich in PHP 7 gemacht hatte. Das Ergebnis ist, dass ich alle Beispiele des Kurses PHP 7 in Python 3 / Flask nachbauen konnte.

Dieses Dokument kann Fehler oder Unvollständigkeiten enthalten. Der Leser kann den Diskussions-Feed |forum| nutzen, um diese zu melden.

Der Inhalt des Dokuments ist wie folgt:

Kapitel
Code-Verzeichnis
Inhalt
   
 
Vorstellung des Kurses
 
Einrichtung einer Arbeitsumgebung
[bases]
Grundlagen der Programmiersprache Python – Sprachstrukturen – Datentypen – Funktionen – Konsolenausgabe – Formatierungsstrings – Typumwandlungen – Listen – Wörterbücher – Reguläre Ausdrücke
[strings]
Notation von Zeichenketten – Methoden der Klasse <str> – Kodierung/Dekodierung von Zeichenketten in UTF-8
[exceptions]
Ausnahmebehandlung
[fonctions]
Gültigkeitsbereich von Variablen – Parameterübergabe – Verwendung von Modulen – der Python-Pfad – benannte Parameter – rekursive Funktionen
[fichiers]
Lesen/Schreiben einer Textdatei – Umgang mit in UTF-8 kodierten Dateien – Umgang mit jSON-Dateien
[impots/v01]
Version 1 der Anwendungsübung: Berechnung der Einkommensteuer. Die Anwendung ist in 18 Versionen verfügbar – Version 1 implementiert eine prozedurale Lösung
[imports]
Verwaltung der Abhängigkeiten einer Anwendung durch Import von Modulen – es wird eine Methode zur Verwaltung der Abhängigkeiten vorgestellt – diese wird im gesamten Dokument verwendet – Verwaltung des Python-Pfads
[impots/v02]
Version 2 der Anwendung baut auf Version 1 auf, indem alle Konfigurationskonstanten in einer Konfigurationsdatei zusammengefasst werden, die auch den Python-Pfad verwaltet
[impots/v03]
Version 3 der Anwendung baut auf Version 2 auf und nutzt in einem Modul gekapselte Funktionen – die Verwaltung der Abhängigkeiten erfolgt über die Konfiguration – Einführung der Datei jSON zum Einlesen der für die Steuerberechnung erforderlichen Daten und zum Schreiben der Berechnungsergebnisse
[classes/01]
Klassen – Vererbung – Methoden und Eigenschaften – Getter/Setter – Konstruktor – Eigenschaft [__dict__]
[classes/02]
Vorstellung der Klassen [BaseEntity] und [MyException], die im weiteren Verlauf des Dokuments verwendet werden – [BaseEntity] erleichtert die Konvertierung zwischen Objekten und Dictionaries
[troiscouches]
Schichtenarchitektur und Schnittstellenprogrammierung. Dieses Kapitel stellt die im weiteren Verlauf des Dokuments verwendeten Programmiermethoden vor
[impots/v04]
Version 4 der Anwendung – diese Version implementiert eine Lösung mit einer Schichtenarchitektur, der Programmierung über Schnittstellen sowie der Verwendung von Klassen, die von [BaseEntity] und [MyException] abgeleitet sind
[databases/mysql]
Installation von SGBD MySQL – Verbindung zu einer Datenbank – Anlegen einer Tabelle – Ausführen von Befehlen SQL SELECT, UPDATE, DELETE, INSERT – Transaktion – konfigurierte Abfragen SQL
[databases/postgresql]
Installation von SGBD PostgreSQL – Verbindung zu einer Datenbank – Anlegen einer Tabelle – Ausführen von Befehlen SQL SELECT, UPDATE, DELETE, INSERT – Transaktion – konfigurierte Abfragen SQL
[databases/anysgbd]
Code-unabhängige Buchung von SGBD
[databases/sqlalchemy]
Der ORM (Objekt-Relational-Mapper) SqlAlchemy – ein ORM ermöglicht eine einheitliche Arbeit mit verschiedenen SGBD - Zuordnung von Klassen zu Tabellen SQL – Operationen auf den Bildklassen der Tabellen SQL
[impots/v05]
Version 5 der Steuerberechnungsanwendung – Verwendung der Schichtenarchitektur der Version 04 und derORM SqlAlchemy zur Arbeit mit den SGBD MySQL und PostgreSQL
[inet]
Internetprogrammierung – Protokoll TCP / IP (Transfer Control Protocol / Internet Protocol) – Protokolle HTTP (HyperText Transfer Protocol) – SMTP (Simple Mail Transfer Protocol) – POP (Post Office Protocol) – IMAP (Internet Message Access Protocol)
[flask]
Webdienste mit dem Flask-Web-Framework – Anzeige einer Seite HTML – Webdienst jSON – Anfragen GET und POST – Verwaltung einer Web-Sitzung
[impots/http-servers/01]
[impots/http-clients/01]
Version 6 der Anwendungsübung – Erstellung eines Webdienstes jSON zur Steuerberechnung mit einer mehrschichtigen Architektur – Erstellung eines Web-Clients für diesen Server mit einer mehrschichtigen Architektur – Client-/Server-Programmierung – Verwendung des Moduls [requests]
[impots/http-servers/02]
[impots/http-clients/02]
Version 7 der Anwendungsübung – Version 6 wurde verbessert: Client und Server sind multithreaded – Dienstprogramme [Logger] zur Protokollierung des Client-Server-Datenaustauschs – [SendMail] zum Versenden einer E-Mail an den Anwendungsadministrator
[impots/http-servers/03]
[impots/http-clients/03]
Version 8 der Anwendungsübung – Version 7 wurde durch die Verwendung einer Web-Sitzung verbessert
[xml]
Verwaltung von XML (eXtended Markup Language) mit dem Modul [xmltodict]
[impots/http-servers/04]
[impots/http-clients/04]
Version 9 der Anwendungsübung – Version 8 wird so angepasst, dass der Austausch zwischen Client und Server in XML erfolgt;
[impots/http-servers/05]
[impots/http-clients/05]
Version 10 der Anwendungsübung – statt N Steuerzahler über N Abfragen GET zu bearbeiten, wird eine einzige Abfrage POST verwendet, wobei die N Steuerzahler im Hauptteil der Abfrage enthalten sind POST
[impots/http-servers/06]
[impots/http-clients/06]
Version 11 der Anwendungsübung – die Client-Server-Architektur der Anwendung wird geändert: Die Schicht [métier] wird vom Server auf den Client verlagert
[impots/http-servers/07]
Version 12 der Anwendungsübung – diese Version implementiert einen MVC-Server (Model – View – Controller), der auf Anfrage des Clients wahlweise jSON, XML oder HTML bereitstellt. In diesem Kapitel werden die Serverversionen jSON und XML implementiert
[impots/http-clients/07]
Implementierung der Clients jSON und XML des Servers MVC der Version 12
[impots/http-servers/07]
Implementierung des Servers HTML der Version 12 – Verwendung des CSS-Bootstrap-Frameworks –
[impots/http-servers/08]
Version 13 der Anwendungsübung – Refaktorisierung des Codes aus Version 12 – Sitzungsverwaltung mit dem Modul [flask_session] und einem Redis-Server – Verwendung verschlüsselter Passwörter
[impots/http-servers/09]
[impots/http-clients/09]
Version 14 der Anwendungsübung – Implementierung von URL mit einem Token CSRF (Cross-Site-Request-Forgery)
[impots/http-servers/10]
Version 15 der Anwendungsübung – Refaktorisierung des Codes aus Version 14 zur Unterstützung zweier Aktionstypen: ASV (Action Show View), die lediglich dazu dienen, eine Ansicht anzuzeigen, ohne den Zustand des Servers zu verändern, ADS (Aktion „Do Something“), die eine Aktion ausführen, welche den Zustand des Servers verändert – diese Aktionen enden alle mit einer Weiterleitung zu einer Aktion ASV – dies ermöglicht die korrekte Verwaltung von Seitenaktualisierungen im Client-Browser
[impots/http-servers/11]
Version 16 der Anwendung – Verwaltung von URL mit Präfix
[impots/http-servers/12]
Version 17 der Anwendung – Portierung von Version 16 auf einen Apache-/Windows-Server
[impots/http-servers/13]
Version 18 der Anwendung – behebt einen Fehler aus Version 17

Die endgültige Version der Anwendungsübung ist eine Client-Server-Anwendung zur Steuerberechnung mit folgender Architektur:

Image

Die oben genannte Schicht [web] ist mit einer Architektur MVC implementiert:

Image

Der Inhalt des Dokuments ist sehr umfangreich. Leser, die es bis zum Ende durcharbeiten, erhalten einen guten Einblick in die Webprogrammierung mit MVC in Python/Flask und darüber hinaus einen guten Einblick in die Webprogrammierung mit MVC in anderen Sprachen.

Leser, die lieber Code sehen, testen und ändern möchten, anstatt einen Kurs zu lesen, können wie folgt vorgehen:

Image

Die Datei „[README.md]“ sieht wie folgt aus:

Image

Es ist unwahrscheinlich, dass der Leser den gesamten Kurs durcharbeitet:

  • Ein Anfänger wird vielleicht die Kapitel 1 bis 15 lesen und es dabei belassen. Anschließend kann er Zeit damit verbringen, eigene Python-Skripte zu programmieren, bevor er zu diesem Kurs zurückkehrt;
  • Leser, die über Python-Grundkenntnisse verfügen und sich mit Datenbanken sowie dem ORM (Object Relational Mapper) [sqlalchemy] vertraut machen möchten, können sich auf die Kapitel 16 bis 20 beschränken;
  • Leser, die sich in die Webprogrammierung (HTTP, SMTP, POP3, IMAP) einarbeiten möchten, können Kapitel 21 lesen. Dieses Kapitel ist recht komplex und behandelt fortgeschrittene Skripte. Es lässt sich auf zwei Ebenen lesen:
    • um die Internetprotokolle kennenzulernen;
    • um Skripte zu erhalten, die diese Protokolle nutzen;
  • Leser, die über Python-Grundkenntnisse verfügen und sich mit dem Flask-Framework in die Webprogrammierung einarbeiten möchten, sollten Kapitel 22 lesen;
  • Leser, die ihre Kenntnisse in der Webprogrammierung mit dem Flask-Framework vertiefen möchten, können die Kapitel 23 bis 38 studieren. Dort werden zunehmend komplexere Client-Server-Anwendungen sowie eine HTML-/Python-Anwendung nach dem Entwicklungsmodell MVC (Modell – Ansicht – Controller). Diese Anwendung wird in Kapitel 32 entwickelt. An dieser Stelle kann man aufhören. Die folgenden Kapitel enthalten keine grundlegenden Änderungen;

Serge Tahé, September 2020