Auf einem Produktivserver habe ich zugegeben noch nie Python verwendet - Asche auf mein Haupt. Meist müsste man Python eben als CGI Programm einsetzen. Anders als PHP, welches meist als Servermodul schon standardmäßig vorhanden ist (als Serverprozess) muss bei jedem Skriptaufruf über CGI Python erstmal aus dem Bett geholt und ein neuer Prozess gestartet werden.
Es gibt auch längst Webserver, die Python als Modul laufen lassen (oder über FCGI) einbinden. Auch für den Apachen gibt es ein Modul (mod_python - sinniger weise). Das ist mir allerdings noch nicht über den weg gelaufen - und selbst einen Server aufsetzen und mod_python installieren habe ich mir für später aufgehoben... kommt vielleicht noch in diesem Kino🤡
Es kommt natürlich auch immer darauf an, was man auf einem Server darf - und vor allem was nicht.
Hier auf meinem Testsystem (also dem lokalen System auf meinem Nachttisch) habe ich es wie beschrieben so eingerichtet, dass ixh meine Skripte.py überall im Webverzeichnis verteilen kann, wie man das von PHP verteilen kann.
Oft kann es Python genau wie dem schüchternen Perl passieren, dass si in einem cgi-bin Verzeichnis eingesperrt werden.
Egal wo sich das Skript aber rumtreibt - wichtig ist die erste Zeile (1), die dem Server mitteilt, wo er nach dem Programm suchen soll, dass das Skript interpretiert.
Die nächste Nummer (2) zeigt, wie man unschwer erkennt, auf eine Funktion, die im Grunde tut, was das Mini-Beispielauch tat, Es wird ein Bild[Objekt] erzeugt und mit der gleichen Methode "gespeichert" - nur diesmal nicht als Date ins Dateisystem, sondern sondern in einem Buffer (Deutsch Puffer hört sich irgendwie anzüglich an - sagen wir es landet halt erstmal im Speicher).
Jetzt werden die Bilddaten base64 kodiert. Das heißt in eine lange Zeichenkette umgewandelt. Das erklärt man vielleicht tatsächlich am Besten an einer E-Mail, da kann man sich das auch ansehen! Eine E-mail ist auch nichts anderes als eine Textdatei. So eine (MIME Format) E-mail besteht aus mehreren Abschnitten, vor denen jeweils eine Art Einleitung (header) steht, was im folgenden Abschnitt kommt: z.B steht da
Content-Type: text/html
Content-Transfer-Encoding: base64
Dann ist da ein png im Anhang - zum Transport als Zeichenkette kodiert - und das tun wir hier auch, bzw. tut es das modul base64. Der Rückgabewert der Funktion "generate_qr_code" ist also nichts als eine (ASCII) Zeichenkette, die dann an der richtigen Stelle (5) in das HTML Dokument (auch eine Zeichenkette (3)) eingebettet wird. An den Server geschickt wird das Ganze mit einer "print" (6).
Unter den Tisch gefallen ist hier die Parameterübergabe.
Im Code ist da zwar etwas vorhanden, was nach GET Parametern fischt, das ist aber hier nur so ein Experiment von mir, denn ich war einigermaßen überrascht davon, dass in der Python Version 3.13 das gute alte Modul "cgi" herausfliegt - oder zu diesem Zeitpunkt besser gesagt schon herausgeflogen ist. Den "offiziellen Weg" zur zukünftigen Parameterübergabe hab ich noch nicht gefunden,,,
🧐
Puh..