Skip to content

1. Vorwort

Das PDF dieses Dokuments ist |HIER| verfügbar.

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

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

  • die Grundlagen der Sprache;
  • MySQL- und PostgreSQL-Datenbankverwaltung;
  • TCP/IP-Netzwerkprogrammierung (HTTP-, POP3-, IMAP- und SMTP-Protokolle);
  • MVC-Webprogrammierung mit dem FLASK-Framework;
  • dreistufige Architekturen und interfacebasierte Programmierung;

Dies ist kein umfassender Python-Kurs, sondern eine Sammlung von Beispielen, die sich an Entwickler richtet, die bereits Erfahrung mit einer Skriptsprache wie Perl, PHP oder VBScript haben, oder an Entwickler, die an typisierte Sprachen wie Java oder C# gewöhnt sind und Interesse daran haben, eine objektorientierte Skriptsprache kennenzulernen. Dieses Dokument ist für Leser mit wenig oder gar keiner Programmiererfahrung nicht geeignet.

Ebenso wenig ist dieses Dokument eine Sammlung von „Best Practices“. Erfahrene Entwickler werden vielleicht feststellen, dass einige der Codezeilen eleganter geschrieben werden könnten. Der einzige Zweck dieses Dokuments besteht darin, Beispiele für diejenigen bereitzustellen, die Python 3 und das Flask-Framework erlernen möchten. Sie können ihr Verständnis anschließend mithilfe anderer Ressourcen vertiefen.

Die Skripte sind kommentiert, und die Ergebnisse ihrer Ausführung werden angezeigt. Manchmal werden zusätzliche Erläuterungen gegeben. Dieses Dokument erfordert aktives Lesen: Um ein Skript zu verstehen, müssen Sie dessen Code, die Kommentare und die Ausführungsergebnisse lesen.

Die Beispiele in diesem Dokument sind |HIER| verfügbar:

Image

Dieses Dokument ist eine Aktualisierung eines älteren Dokuments, das im Juni 2011 veröffentlicht wurde |https://tahe.developpez.com/tutoriels-cours/python/|. Das Dokument von 2011 wurde mit dem Python-2.7-Interpreter erstellt. Seitdem wurden Python-3.x-Versionen veröffentlicht. Stand Februar 2020 ist die aktuelle Version 3.8. Die 3.x-Versionen haben zu einer Unterbrechung der versionenübergreifenden Kompatibilität geführt: Code, der unter Python 2.7 läuft, funktioniert unter Python 3.x möglicherweise nicht. Dies gilt insbesondere für die Konsolenausgabe. In 2.7 kann man [print "toto"] schreiben, während man in 3.x [print("toto")] schreiben muss: Klammern sind erforderlich. Diese einfache Änderung bedeutet, dass der Großteil des im Dokument von 2011 bereitgestellten Codes nicht direkt mit Python 3.x verwendet werden kann. Er muss angepasst werden.

Dieses neue Dokument tut mehr, als nur den Code von 2011 zu aktualisieren, damit er unter Python 3.8 ausgeführt werden kann:

  • Die Abschnitte zur TCP/IP-Programmierung und zur Datenbanknutzung wurden erheblich überarbeitet;
  • der Abschnitt über Webprogrammierung, der zuvor nur eine Einführung war, ist nun ein vollständiger Kurs unter Verwendung des Flask-Frameworks;

Bei der Erstellung dieses Kurses bin ich einen unkonventionellen Weg gegangen: Ich habe den PHP-Kurs [Einführung in PHP 7 anhand von Beispielen] portiert. Daher habe ich mich nicht an die üblichen Strukturen von Python- oder Flask-Kursen gehalten. Vor allem wollte ich herausfinden, wie ich in Python 3 das umsetzen kann, was ich in PHP 7 gemacht habe. Das Ergebnis ist, dass es mir gelungen ist, alle Beispiele aus dem PHP-7-Kurs in Python 3 / Flask nachzubilden.

Dieses Dokument kann Fehler oder Auslassungen enthalten. Leser können diese über den Diskussions-Thread |forum| melden.

Der Inhalt des Dokuments ist wie folgt:

Kapitel
Code-Repository
Inhalt
   
 
Kursübersicht
 
Einrichten einer Arbeitsumgebung
[Grundlagen]
Die Grundlagen der Programmiersprache Python
– Sprachstrukturen – Datentypen
– Funktionen – Konsolenausgabe –
Formatzeichenfolgen – Typkonvertierung
– Listen – Wörterbücher – reguläre
Ausdrücke
[Zeichenketten]
Zeichenfolgen-Notation – Methoden der
Klasse <str> – Kodierung/Dekodierung
Zeichenfolgen in UTF-8
[Ausnahmen]
Ausnahmebehandlung
[Funktionen]
Variablengültigkeitsbereich – Parameter
– Verwendung von Modulen – Der
Python-Pfad – Benannte
Parameter – Rekursive
Funktionen
[Dateien]
Lesen/Schreiben einer Textdatei –
Umgang mit UTF-8-kodierten Dateien –
Umgang mit JSON-Dateien
[taxes/v01]
Version 1 der Anwendung
Übung: Berechnung der Einkommensteuer
. Die Anwendung ist in 18
Versionen – Version 1 implementiert
eine prozedurale Lösung
[Importe]
Verwaltung von Anwendungsabhängigkeiten
durch Importieren von
– eine Methode zur Verwaltung von Abhängigkeiten
Verwaltungsmethode wird vorgestellt
– sie wird im gesamten
Dokument verwendet – Verwaltung des
Python-Pfads
[impots/v02]
Version 2 der Anwendung
baut auf Version 1 auf, indem sie
alle Konfigurationskonstanten in einer
Konfigurationsdatei, die zudem
den Python-Pfad verwaltet
[imports/v03]
Version 3 der Anwendung
baut auf Version 2 auf, indem sie
Funktionen, die in einem
Modul – die
wird über die
Konfiguration – Einführung einer
JSON-Datei zum Einlesen der für
für die Steuerberechnung und zum Schreiben der
Berechnungsergebnisse
[Klassen/01]
Klassen – Vererbung – Methoden
und Eigenschaften – Getter/Setter –
Konstruktor – [__dict__]
Eigenschaft
[Klassen/02]
Einführung in die Klassen [BaseEntity]
und [MyException]
im weiteren Verlauf des Dokuments
[BaseEntity]
erleichtert Objekt-/Dictionary-
Konvertierungen
[drei-Schichten]
Schichtarchitektur und
schnittstellenbasierte Programmierung.
Dieses Kapitel stellt die
Programmiermethoden
im weiteren Verlauf des
Dokument
[taxes/v04]
Version 4 der Anwendung – diese
Version implementiert eine Lösung
mit einer mehrschichtigen Architektur
sowie
der Verwendung von Klassen, die von
[BaseEntity] und
[MyException]
[Datenbanken/MySQL]
Installation des MySQL-DBMS –
Verbindung zu einer Datenbank herstellen –
Erstellen einer Tabelle – Ausführen von
SELECT-, UPDATE-, DELETE-
und INSERT-SQL-Anweisungen –
Transaktionen – parametrisierte
SQL-Abfragen
[Datenbanken/PostgreSQL]
Installation des PostgreSQL-DBMS
– Verbindung zu einer Datenbank herstellen –
Erstellen einer Tabelle – Ausführen von
SELECT-, UPDATE-, DELETE-
und INSERT-SQL-Anweisungen –
Transaktionen – parametrisierte
SQL-Abfragen
[Datenbanken/beliebiges DBMS]
DBMS-unabhängigen Code schreiben
[Datenbanken/SQLAlchemy]
Das SqlAlchemy-ORM (Object-
Relational Mapper) – ein ORM
ermöglicht einen einheitlichen Ansatz für die
Arbeit mit verschiedenen DBMS –
Zuordnung von Klassen zu SQL-Tabellen –
Operationen auf Klassen
, die SQL-Tabellen repräsentieren
[taxes/v05]
Version 5 der Steuerberechnungs-
– Verwendung der mehrschichtigen
Architektur aus Version 04 und
dem SqlAlchemy-ORM für die
mit MySQL und PostgreSQL
DBMS
[inet]
Webprogrammierung – TCP/IP
Protokoll (Transmission Control
/ Internetprotokoll) –
HTTP-Protokolle (HyperText
Transfer Protocol) – SMTP
(Simple Mail Transfer Protocol)
– POP (Post Office Protocol) –
IMAP (Internet Message Access
Protocol)
[flask]
Webdienste mit dem Flask-Web-Framework
Framework – Anzeigen einer
HTML-Seite – JSON-Webdienst
– GET- und POST-Anfragen –
Verwaltung einer Websitzung
[impots/http-servers/01]
[taxes/http-clients/01]
Version 6 der Anwendung
Übung – Erstellen eines JSON-Webdienstes
Service zur Steuerberechnung mit einer
mehrschichtigen Architektur – Schreiben
eines Web-Clients für diesen Server mit einer
Mehrschichtarchitektur –
Client/Server-Programmierung –
Verwendung des Moduls [requests]
[taxes/http-servers/02]
[Steuern/HTTP-Clients/02]
Version 7 der Anwendung
Übung – Version 6 wurde verbessert:
Client und Server sind
multithreaded – [Logger]
Dienstprogramme zur Protokollierung von Client-/Server-
[SendMail] zum Versenden
einer E-Mail an den
Administrator
[taxes/http-servers/03]
[Steuern/HTTP-Clients/03]
Version 8 der Anwendung
Übung – Version 7 wurde verbessert
durch die Verwendung einer Web-Sitzung
[xml]
XML (eXtended Markup
Language) mit dem
[xmltodict]-Modul
[taxes/http-servers/04]
[impots/http-clients/04]
Version 9 der Anwendung
Übung – Version 8 wird angepasst
um Client/Server-
Austausch in XML;
[taxes/http-servers/05]
[Steuern/HTTP-Clients/05]
Version 10 der Anwendung
Übung – statt N
Steuerzahler über N GET-Anfragen zu verarbeiten, wird eine
einzige POST-Anfrage mit
den N Steuerzahlern im POST-
Body
[taxes/http-servers/06]
[Steuern/HTTP-Clients/06]
Übung zur Version 11 der Anwendung
Übung – die
Client-Server-Architektur der Anwendung
geändert: Die [Business]-Schicht
wird vom Server auf den
Client
[Steuern/HTTP-Server/07]
Version 12 der Anwendung
Übung – diese Version implementiert
einen MVC-Server (Model–View–
Controller)-Server, der
JSON, XML und HTML
, je nach
Anfrage des Clients. Dieses Kapitel
implementiert die JSON- und XML-
des Servers
[impots/http-clients/07]
Implementierung der JSON- und
XML-Clients für den MVC-Server
in Version 12
[impots/http-servers/07]
Implementierung des HTML-Servers
in Version 12 – unter Verwendung des
Bootstrap-CSS-Frameworks –
[impots/http-servers/08]
Version 13 der Anwendung
– Refactoring des Codes
aus Version 12 – Verwaltung der Sitzungen
mit dem
[flask_session]-Moduls und eines
Redis-Server – Verwendung verschlüsselter
Passwörtern
[impots/http-server/09]
[Importe/HTTP-Clients/09]
Übung zur Version 14 der Anwendung
Übung – Implementierung von URLs
mit einem CSRF-Token (Cross-Site Request
Forgery)
[impots/http-servers/10]
Version 15 der Anwendung
Übung – Refactoring des Codes
aus Version 14, um zwei
Aktionsarten: ASV (Action
Show View), die nur dazu dienen
dazu dient, eine Ansicht anzuzeigen, ohne
den Zustand des Servers zu verändern, und
ADS (Action Do Something),
die eine Aktion ausführen, die
den Zustand des Servers verändert – diese
Aktionen enden alle mit einer Weiterleitung zu
einer ASV-Aktion – dies ermöglicht
korrekte Behandlung von Seitenaktualisierungen
im Client-Browser
[impots/http-servers/11]
Version 16 der Anwendung –
URL-Verwaltung mit Präfixen
[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 in Version 17

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

Image

Die obige [Web]-Schicht ist unter Verwendung einer MVC-Architektur implementiert:

Image

Der Inhalt dieses Dokuments ist sehr umfangreich. Leser, die es bis zum Ende durcharbeiten, werden ein solides Verständnis der MVC-Webprogrammierung in Python/Flask und darüber hinaus ein solides Verständnis der MVC-Webprogrammierung in anderen Sprachen erlangen.

Leser, die es vorziehen, den Code anzusehen, zu testen und zu ändern, anstatt einen Vortrag zu lesen, können wie folgt vorgehen:

  • Sehen Sie sich den Code in den Beispielen |HIER| an:

Image

  • In jedem Ordner befindet sich eine [README.md]-Datei, die den Ordner mit einem Kapitel des Kurses verknüpft und dessen Inhalt zusammenfasst:

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

Image

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

  • Ein Anfänger liest vielleicht die Kapitel 1 bis 15 und hört dann auf. Er kann dann Zeit damit verbringen, eigene Python-Skripte zu programmieren, bevor er zu diesem Kurs zurückkehrt;
  • Leser mit Grundkenntnissen in Python, die mehr über Datenbanken und ORM (Object Relational Mapper) [SQLAlchemy] erfahren möchten, finden möglicherweise die Kapitel 16 bis 20 ausreichend;
  • Leser, die Webprogrammierung (HTTP, SMTP, POP3, IMAP) erlernen möchten, können Kapitel 21 lesen. Dieses Kapitel ist recht komplex und behandelt fortgeschrittene Skripte. Es kann auf zwei Ebenen gelesen werden:
    • um mehr über Internetprotokolle zu erfahren;
    • um Skripte zu erhalten, die diese Protokolle nutzen;
  • Leser mit Grundkenntnissen in Python, die Webprogrammierung mit dem Flask-Framework erlernen möchten, sollten Kapitel 22 lesen;
  • Leser, die tiefer in die Webprogrammierung mit dem Flask-Framework einsteigen möchten, können die Kapitel 23 bis 38 studieren. Diese Kapitel behandeln die Entwicklung zunehmend komplexer Client-Server-Anwendungen sowie eine HTML/Python-Anwendung nach dem MVC-Entwicklungsmuster (Model–View–Controller). Diese Anwendung wird in Kapitel 32 entwickelt. Sie können an dieser Stelle aufhören. Die folgenden Kapitel führen nicht grundlegende Änderungen ein;

Serge Tahé, September 2020