Python CGI-Skripte erstellen
CGI (Common Gateway Interface)... ist eine Schnittstelle, um Scripte im Web bereitzustellen. ist eine Schnittstelle zwischen einem HTTP-Server und ausführbaren Programmen. beschreibt wie die Dateneingabe im Web-Browser an den Web- Server gesendet und mit Hilfe eines Scripts verarbeitet wird. Python - Programmierung, 21.10.10 Seite 2
CGI-Skripte laufen auf einem HTTP-Server wie zum Beispiel XAMPP von Apache. werden auf dem HTTP-Server im Verzeichnis /cgi-bin/ oder /cgi/ abgelegt. Für die Ablage können auch Unterverzeichnis im Verzeichnis /cgi-bin/ genutzt werden. werden vom Internet mit Hilfe einer URL gestartet. produzieren häufig eine HTML-Seite als Ausgabe. werden häufig in Perl geschrieben. Als Programmiersprache kann aber auch Python genutzt werden. Python - Programmierung, 21.10.10 Seite 3
werden genutzt, um HTML-Seiten dynamisch zu generieren. Daten aus Web-Formularen zu verarbeiten. einen Zugriff auf Datenbanken zu ermöglichen. Foren, Suchen etc. zu implementieren. Python - Programmierung, 21.10.10 Seite 4
Kommunikation Web-Browser Internet HTTP-Server CGI-Skripte Database Python - Programmierung, 21.10.10 Seite 5
Beispiel für ein HTML-Formular <html> <head> <titel>eingabe einer Adresse</titel> </head> <form action="http://localhost/cgi-bin/python/adresse.py" method="get"> <input type="text" name="txtbenutzer" size="40"></td> <input type="submit" value="submit" /> </form> </html> Python - Programmierung, 21.10.10 Seite 6
Beginn und Ende eines Formulars Die Form beginnt mit «<form>». Folgende Attribute können gesetzt werden: «<form action="">» legt den Speicherort des auszuführenden Script fest. «<form method="">» legt die Art der Übertragung der Daten fest. Mit Hilfe des Tags «</form>» endet die Form. Python - Programmierung, 21.10.10 Seite 7
Möglichkeiten für den Aufruf eines Skripts «<form action="http://localhost/cgi-bin/python/adresse.py"> </form>» Das ausgefüllte Formular wird gesendet. Anschließend wird das angegebene Skript ausgeführt. Das Skript kann die Daten lesen und bearbeiten. «<a href="http://localhost/cgi-bin/python/adresse.py"> </a>» Der Aufruf folgt mit Hilfe eines Hyperlinks Das Skript wird genutzt, um Daten aus einer Datenbank anzuzeigen und dem entsprechend die Webseite anzupassen. Diese Form ermöglicht eine statische Datenausgabe für den Nutzer der Webseite. Python - Programmierung, 21.10.10 Seite 8
URL (uniform ressource locator ) gibt Auskunft über den Speicherort einer Datei auf irgendeinem Rechner im Web. beginnt mit den genutzten Protokoll. http:/ (Hypertext Transfer Protocol) wird zum Surfen im Internet genutzt. file:// zeigt eine Datei auf dem lokalen Rechner an. Dem Protokoll folgt der Servername. /localhost/ bezeichnet den momentan genutzten Web-Server. Anschließend kommt der Pfad einer Datei. Die einzelnen Elemente werden durch den Schrägstrich getrennt. Python - Programmierung, 21.10.10 Seite 9
Formulardaten mit Hilfe von Get übertragen «<form action="http://localhost/cgi-bin/python/adresse.py" method="get">» Übertragung von kleinen, n icht sensiblen Datenmengen.. In der Adresszeile des Browser sind die zu übertragenden Daten sichtbar. «http://localhost/cgi-bin/python/adresse.py? txtvorname=tine&txtnachname=andersen» hängt die Daten als Querystring an die URL. Python - Programmierung, 21.10.10 Seite 10
Beispiel <html> <head> <titel>eingabe einer Adresse</titel> </head> <form action="http://localhost/cgi-bin/python/adresse.py" method="get"> <input type="text" name="txtbenutzer" size="40"></td> <input type="submit" value="submit" /> </form> </html> Python - Programmierung, 21.10.10 Seite 11
Querystring beginnt mit dem Fragezeichen. Dem Fragezeichen folgen Formularelemente, getrennt duchr ein kaufmännisches Und. Ein Formularelement... besteht aus einem Namen und einem Wert. ist ein Schlüssel-Wert-Paar. Der Schlüssel und der Wert eines Formularelements werden durch das Gleichheitszeichen getrennt. Im Wert selber werden Leerzeichen durch das Pluszeichen ersetzt. ASCII-Zeichen von 128 bis 255 sowie Steuerzeichen (+, & etc.) durch einen Hexadezimalwert ersetzt. Python - Programmierung, 21.10.10 Seite 12
Formulardaten mit Hilfe von Post übertragen «<form action="http://localhost/cgi-bin/python/adresse.py" method="post">» wird für die Übertragung von großen Datenmengen genutzt. sollte immer für sensible Daten wie Passwörter etc. genutzt werden. schickt die Daten in einem eigenen Objekt an das CGI-Skript. Python - Programmierung, 21.10.10 Seite 13
Beispiel <html> <head> <titel>eingabe einer Adresse</titel> </head> <form action="http://localhost/cgi-bin/python/adresse.py" method="post"> <input type="text" name="txtbenutzer" size="40"></td> <input type="submit" value="submit" /> </form> </html> Python - Programmierung, 21.10.10 Seite 14
Formularfelder zur Eingabe definieren «<input type="text" name="txtbenutzer" size="40">». beginnen mit dem Tag-Namen «<input>» Mit Hilfe des Attributs type wird die Art des Formularfeldes angegeben. In diesem Beispiel wird ein Textfeld genutzt. Mit Hilfe des Attributs name wird ein eindeutiger Name für das Formularfeld vergeben. Die Bezeichnung identifiziert ein Formularfeld eindeutig. Python - Programmierung, 21.10.10 Seite 15
Schaltflächen «<input type="submit" value="submit" />». beginnen mit dem Tag-Namen «<input>» «<input type="submit">» erstellt eine Schaltfläche. «<input value= >» legt einen Wert für die Schaltfläche fest. Dieser Wert wird dem Skript übergeben. Mit Hilfe des Wertes kann ermittelt werden, welche Schaltfläche gedrückt wurde. Python - Programmierung, 21.10.10 Seite 16
Aufbau eines CGI-Skripts in Python «#!/Python31/python.exe» print("content-type: text/html; charset=iso-8859-15") print() print("<html>") print("<head><title>adressen ausgeben</title></head>") print("<body>hallo</body>") print("</html>") Python - Programmierung, 21.10.10 Seite 17
Interpreter für das Script angeben MS Windows: «#! /Python31/python.exe» Linux: «#! /usr/bin/python» Die Shebang-Zeile... definiert den Speicherort des Interpreters. steht immer in der ersten Zeile eines Python-Programms. beginnt immer mit #!. Der Python-Code wird mit dem angegebenen Interpreter ausgeführt. Falls der Speicherort des Interpreters nicht bekannt ist, fragen Sie ihren Systemadministrator. Python - Programmierung, 21.10.10 Seite 18
Ausgabe von HTML «print("<html>")» druckt HTML-Anweisungen über die Standardausgabe aus. «print()» ist eine vordefinierte Funktion in Python. Die Parameterliste der Funktion wird durch die runden Klammern begrenzt. Der Funktion wird eine HTML-Anweisung als String übergeben. Python - Programmierung, 21.10.10 Seite 19
Aufbau eines HTML-Pakets Mit Hilfe der Anweisung «print("content-type: text/html; charset=iso-8859-15")» im Kopf (Header) des Pakets wird der Datentyp des Paktes beschrieben. MIME (Multipurpose Internet Mail Extensions) definiert den benutzten Zeichensatz. Der Körper (Body) enthält die HTML-Anweisungen zur Erstellung der Webseite. Header und Body werden durch eine Leerzeile «print()» getrennt. Python - Programmierung, 21.10.10 Seite 20
Zugriff auf Formulardaten «#!/Python31/python.exe import cgi formular = cgi.fieldstorage()» vorname = formular.getfirst('txtvorname', "") nachname = formular.getvalue('txtnachname') Python - Programmierung, 21.10.10 Seite 21
Klasse cgi.fieldstorage wird im Modul «cgi» definiert. bietet Methoden zur Verarbeitung von Daten aus einem Web- Formular. arbeitet ähnlich wie ein Dictonary. Als Schlüssel wird der Name des Formularfeldes genutzt. Wert wird der, im Formularfeld eingegebene Wert ausgelesen. Python - Programmierung, 21.10.10 Seite 22
Wert des Formularfeldes als String einlesen «formular.getvalue('txtnachname', ' ')» Parameter der Methode: Der Name des Formularfeldes muss übergeben werden. Optional: Ein Standardwert. Python - Programmierung, 21.10.10 Seite 23
Rückgabewerte der Methode.getvalue() «None». Das Formularfeld ist nicht vorhanden und es wurde kein Standardwert angegeben. «Default». Das Formularfeld ist nicht vorhanden. Der Standardwert wird genutzt. «String». Textfelder werden eingelesen. Der Name des Formularfeldes existiert einmal. «String». Optionsfelder werden eingelesen. Der Name des Formularfeldes existiert mehrmals. Es werden alle Werte als Liste übergeben. Problem: Wird ein String oder eine Liste von Strings übergeben? Python - Programmierung, 21.10.10 Seite 24
Wert des Formularfeldes als String einlesen «formular.getfirst('txtnachname', ' ')» Parameter der Methode: Der Name des Formularfeldes muss übergeben werden. Optional: Ein Standardwert. Python - Programmierung, 21.10.10 Seite 25
Rückgabewerte der Methode.getfirst() «None». Das Formularfeld ist nicht vorhanden und es wurde kein Standardwert angegeben. «Default». Das Formularfeld ist nicht vorhanden. Der Standardwert wird genutzt. «String». Textfelder werden eingelesen. Der Name des Formularfeldes existiert einmal. «String». Optionsfelder werden eingelesen. Der Name des Formularfeldes existiert mehrmals. Es wird nur das erste Element einer Liste von Werten zurückgegeben. Python - Programmierung, 21.10.10 Seite 26
Wert des Formularfeldes als Liste einlesen «formular.getlist('chkprospekt')» Der Name des Formularfeldes wird der Funktion übergeben. Rückgabewerte: «None». Das Formularfeld ist nicht vorhanden. Es wird eine leere liste übergeben. «List». Optionsfelder oder Textfelder werden eingelesen. Der Formularname kann mehrmals auftreten, muss aber nicht. Es wird immer eine Liste zurückgegeben. Python - Programmierung, 21.10.10 Seite 27
Fehlersuche «#!/Python31/python.exe import cgi, cgitb cgitb.enable()» Mit Hilfe der Methode «cgitb.enable()» aus dem Modul «cgitb» werden Laufzeitfehler abgefangen. Python - Programmierung, 21.10.10 Seite 28
String-Manipulation «ZeichenToHTML = { } ord("ä") : "ä", ord("ö") : "ö", ord("ü") : "ü", ord("ß") : "ß"» def getstring(daten): return str(daten).translate(clsbestellformular.zeichentohtml) Python - Programmierung, 21.10.10 Seite 29
Hinweise Die Funktion «str()» wandelt einen beliebigen Datentyp in einen String um. Die Funktion «ord()» gibt den dezimalen ASCII-Code eines Zeichens zurück. String-Methode «.translate()»: Argument: Umwandlungstabelle als Dictonary. Falls der Schlüssel des Dictonary in einem String vorkommt, ersetzt die Methode den Schlüssel durch den dazugehörigen Wert. Rückgabe: Der bearbeitete String. Python - Programmierung, 21.10.10 Seite 30