Auswertung von Formularen mit CGI

Mit Hilfe von CGI lassen sich auch Webformulare auswerten. Das Formular kann dabei direkt in einer HTML-Datei stehen, es kann aber auch mit Hilfe einer Pythondatei durch CGI erzeugt werden. Dazu als erstes ein einfaches Beispiel:

Zunächst erstellen wir in unserem Webserver-Verzeichnis die folgende HTML-Datei mit einem Formular:

<!DOCTYPE html> <html lang="de"> <head> <meta charset="utf-8"> <title>Python - CGI-Programmierung</title> </head> <body> <form method='post' action='cgi-bin/script03_auswertung.py'> <p>Name: <input type='text' name='name' /></p> <p>Alter: <input type='text' name='alter' /></p> <input type='checkbox' name='happy' /> Happy <input type='checkbox' name='sad' /> Sad <input type='submit' name='submit' value='Submit' /> </form> </body> </html>

Neu ist das Attribut action im <form>-Tag. Es verweist auf das Script script03_auswertung.py, welches sich im Ordner cgi-bin befindet. Die Formulardaten werden nun als Werte von Variablen an dieses Script übermittelt. Das Script ist wie folgt aufgebaut:

#!/usr/bin/env python3 import cgi header = ''' <!DOCTYPE html> <html lang="de"> <head> <meta charset="utf-8"> <title>Python - CGI-Programmierung</title> </head> <body> ''' footer = ''' </body> </html> ''' form = cgi.FieldStorage() print(header) if form.getvalue("name"): name = form.getvalue("name") print("<h1>Hello " +name+"! Thanks for using my script!</h1><br />") if form.getvalue("alter"): alter = int(form.getvalue("alter")) print("<p>In ten years, you will be",alter+10,"years old.</p>") if form.getvalue("happy"): print("<p> Yayy! I'm happy too! </p>") if form.getvalue("sad"): print("<p> Oh no! Why are you sad? </p>") print(footer)

Im Auswertungsscript wird nun eine Webseite erzeugt, die die Formulardaten auswertet. Der wichtigste Befehl zum Auswerten des Formulars ist das Importieren der CGI-Bibliothek import cgi

Anschließend werden der Kopf- und der Fußquelltext der Seite als Variablen angelegt.

Danach wird mit dem Befehl form = cgi.FieldStorage() aus der Bibliothek cgider Inhalt des Formulars in deer Variable form gespeichert.

Nun wird mit mehreren print-Anweisungen der Seitenquelltext in Abhängigkeit vom Formularinhalt ausgegeben. Dabei kann mit form.getvalue(...) auf die jeweiligen Formularelemente zugegriffen werden. Als Argument wird der Name des Formularelements übergeben. Die Funktion gibt eine Zeichenkette, das value des Formulars zurück. Falls es kein value gibt, wird None zurückgegeben.

Das Ganze kann man auch in einer Datei zusammenfassen: