Kapitel 22
CGI-Programmierung
608
Beispiel:
22.4 Verarbeitung von Eingabedaten in einem CGI-Skript
Kommen wir wieder zu der Login-Webseite aus dem letzten Abschnitt zurück. Jemand hat
Name und Passwort eingegeben und klickt auf die Schaltfläche. Das Skript
login.py wird
aufgerufen. Was passiert nun?
Um in einem CGI-Skript Eingabedaten zu verarbeiten, die ihm beim Aufruf von einer
HTML-Seite mit Formular übermittelt worden sind, verwendet man eine Instanz der Klasse
FieldStorage aus dem Modul cgi. Das Modul wird am besten mit import cgi importiert,
um Namenskollisionen zu vermeiden.
Das
FieldStorage-Objekt kann man sich als Dictionary vorstellen: Darin sind den Varia-
blennamen (Namen der verschiedenen
<input>-Tags) des Formulars die Variablenwerte
zugeordnet. Die einzelnen Werte sind übrigens immer Strings. Mithilfe verschiedener
Methoden kann man nun in dem CGI-Skript auf die Variablen zugreifen (siehe Tabelle
22.1). Dabei sind zwei Fälle zu unterscheiden:
Zu einem Variablennamen gibt es nur einen einzigen Wert. Dieser Fall tritt ein, wenn in
einem Querystring, den das Formular liefert, der Variablenname nur einmal vorkommt.
In diesem Fall ist dem Variablennamen ein String zugeordnet.
Zu einem Variablennamen gibt es mehrere Werte. Dieser Fall tritt ein, wenn im Query-
string der Variablenname mehrmals vorkommt. In diesem Fall ist dem Variablennamen
eine Liste von Strings zugeordnet.
Die wichtigste Methode für den Zugriff auf die Formular-Variablen ist
getvalue(). Der
Aufruf
form.getvalue('variablenname') liefert
einen String mit dem Variablenwert, wenn nur ein einziger Wert existiert
eine Liste von Strings mit Variablenwerten, wenn mehrere Werte existieren
None, falls der Variablenname im Formular nicht vorkommt.
Kommen wir zu einem Beispiel. Das folgende CGI-Skript kann von der HTML-Seite aus
Abschnitt 22.3.1 (Abbildung 22.5) aufgerufen werden (Dateiname
login.py). Es erzeugt als
Antwort eine HTML-Seite mit einer persönlichen Begrüßung (Abbildung 22.6).
Skript:
<input type="submit" value="Login">
import cgi
form = cgi.FieldStorage()
#! /Python35/python.exe #1
import cgi
form = cgi.FieldStorage() #2
609
22.4
Verarbeitung von Eingabedaten in einem CGI-Skript
Erläuterung
#1: Hier wird dem Betriebssystem mitgeteilt, welcher Interpreter zur Ausführung des
Skripts angewendet werden soll.
#2: Es wird das Objekt form als Instanz der Klasse FieldStorage erzeugt.
#3: Über das FieldStorage-Objekt form wird auf die Inhalte der Variablen zugegriffen. In
dieser Zeile liefert die Methode
getvalue() zum Variablennamen vorname einen String als
Wert, da dieser Variablenname im Querystring nur einmal vorkommt.
#4: Die Kopfzeile des HTTP-Objektes wird ausgegeben.
#5: Die Leerzeile markiert das Ende des Headers.
#6: In dieser und den folgenden Zeilen wird der HTML-Quelltext erzeugt, der vom HTTP-
Server an den Klienten zurückgeschickt wird. In unserem Beispiel entsteht als Ausgabe fol-
gender HTML-Text:
Dieser HTML-Quelltext wird vom Browser des Clients interpretiert. Abbildung 22.6 zeigt
das Ergebnis. Sie können hier Folgendes erkennen:
Im oberen Fensterrahmen erscheint der Titel der Seite »Login-Seite«.
Im Adressfenster erkennen Sie den URL des CGI-Skripts mit dem angehängten Query-
string
?vorname=Sandra&name=Klein.
Unten rechts wird angezeigt, dass sich der HTTP-Server im lokalen Intranet befindet.
Eigentlich ist er in diesem Fall sogar auf der gleichen Maschine wie der Webbrowser.
vorname = form.getvalue('vorname') #3
name = form.getvalue('name')
print('Content-type: text/html; charset=utf-8') #4
print() #5
print('<html>') #6
print('<head><title> Login-Seite </title></head>')
print('<body>')
print('<h3>Herzlich willkommen,',
vorname, name,'!</h3>')
print('</body>')
print('</html>')
<html>
<body>
<head><title> Login-Seite </title></head>
<h3>Herzlich willkommen, Sandra Klein !</h3>
</body>
</html>

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.