Kapitel 22
CGI-Programmierung
604
(rechts) und wählen dann im Menü BEFEHLE die Schaltfläche EIGENSCHAFTEN. Dort kön-
nen Sie in einer Matrix die Zugriffsrechte einstellen.
Alternativ können Sie sich mit PuTTY in den entfernten Rechner einloggen. Gehen Sie
mit dem
cd-Kommando in das /cgi-bin-Verzeichnis mit den CGI-Skripten und defi-
nieren Sie mit dem Kommando
chmod 711 * die Zugriffsrechte für alle Dateien in die-
sem Verzeichnis neu.
22.3 Kommunikation über interaktive Webseiten
Unser erstes CGI-Skript produzierte zwar eine Ausgabe (Uhrzeit), konnte aber keine Einga-
bedaten verarbeiten. Wird ein CGI-Skript von einer interaktiven HTML-Seite aus gestartet,
kann man ihm auf relativ einfache Weise Variablen übergeben. Abbildung 22.4 illustriert
das Prinzip. Die interaktive HTML-Seite enthält Komponenten zur Dateneingabe (Eingabe-
felder, Radiobuttons etc.) und eine spezielle Schaltfläche, den Submit-Button. Wenn man
ihn angeklickt, wird das CGI-Skript auf dem Server aufgerufen und ihm gleichzeitig die
Variablen und ihre Werte übergeben. Das CGI-Skript verarbeitet die erhaltenen Daten und
erzeugt den Quelltext einer neuen HTML-Seite. Dieser wird in einem HTTP-Paket an den
Client zurückgesendet.
Abb. 22.4: Kommunikation zwischen interaktiven HTML-Seiten und CGI-Skripten
22.3.1 Aufbau eines HTML-Formulars
Eine HTML-Seite wird interaktiv, wenn man sie mit einem Formular (engl. form) versieht.
Ein Formular besteht aus verschiedenen interaktiven Komponenten, in die man etwas hi-
neinschreiben oder die man anklicken kann. Abbildung 22.5 zeigt ein kleines Beispiel.
interaktive HTML-Seite
Submit-
Button
Komponenten zur
Dateneingabe
dynamisch erzeugte HTML-Seite
(eventuell wieder interaktiv)
Antwort
b
a
CGI-Skript
verarbeitet Daten und
erzeugt HTML-Quelltext
var1=wert1
var2=wert2
Client Server
605
22.3
Kommunikation über interaktive Webseiten
Abb. 22.5: Ansicht einer HTML-Seite mit Formular
Der Quelltext dazu sieht so aus:
Geben Sie diesen Text mit einem normalen Texteditor ein (Sie können auch IDLE verwen-
den) und speichern Sie ihn z.B. unter dem Dateinamen
login.html ab. Öffnen Sie
anschließend die Datei mit einem Browser. Sie sehen dann eine Webseite wie in Abbildung
22.5.
Schauen wir uns nun den HTML-Quelltext genauer an:
Das Formular (fett gedruckt) beginnt mit dem Tag
<form ... > und endet mit </form>. Das
Attribut
action erhält als Wert einen String mit dem URL eines CGI-Skripts.
Das Tag
<pre> ... </pre> bewirkt, dass der enthaltene Text in einer Schriftart mit konstan-
ter Zeichenweite erscheint (z.B. Courier) und so gesetzt wird, wie es im HTML-Text angege-
ben ist. Das heißt, die Leerzeichen werden nicht ignoriert.
Mit
<input type="text" ...> werden zwei Eingabefelder definiert und <input
type="submit" ...>
definiert die Schaltfläche mit der Aufschrift LOGIN.
Das
<form>-Tag zu Beginn des Formulars enthält das Attribut action="http://local-
host:8000/cgi-bin/login.py"
. Das action-Attribut legt fest, was passiert, wenn jemand
auf die Schaltfläche des Formulars klickt. In diesem Fall bewirkt es, dass die Datei
login.py
aufgerufen wird, die im Verzeichnis cgi-bin des Servers gespeichert ist.
Im
<form>-Tag wird außerdem noch die Methode der Datenübertragung (get oder post) fest-
gelegt. Was ist der Unterschied? Die Get-Methode bewirkt, dass die Inhalte der Form-Varia-
blen
name und vorname als Querystring an den URL des Skripts angehängt werden. Falls als
Vorname
"Sandra" und als Nachname "Klein" eingegeben worden ist, wird nach Betäti-
gen der Schaltfläche L
OGIN folgender Aufruf gestartet, den man im Adressfenster des Brow-
sers sehen kann:
<html>
<body>
<form method="get"
action="http://localhost:8000/cgi-bin/login.py">
<pre>
Vorname: <input type="text" name="vorname" maxlength=20 size=15>
Name: <input type="text" name="name" maxlength=20 size=15>
<input type="submit" value="Login">
</pre>
</form>
</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.