Dies ist eine alte Version des Dokuments!
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:
- formular.html
<!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:
- script03_auswertung.html
#!/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 cgi
der 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:
- script4.py
#!/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("submit"): 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>") else: print("<form method='post' action='script04.py'>") print("<p>Name: <input type='text' name='name' /></p>") print("<p>Alter: <input type='text' name='alter' /></p>") print("<input type='checkbox' name='happy' /> Happy") print("<input type='checkbox' name='sad' /> Sad") print("<input type='submit' name='submit' value='Submit' />") print("</form") print(footer)