info@a-coding-project.de

Python: CGI-Programmierung

Mit dem Modul cgi steht standardmäßig ein relativ komfortables Interface zur CGI-Programmierung zur Verfügung. Es unterstützt den Programmierer insbesondere bei der Auswertung der Felder von Eingabemasken. Das Folgende Skript erzeugt eine Maske, bzw. gibt deren Inhalt aus:

import cgi
import cgitb; cgitb.enable()

form = cgi.FieldStorage()

if form.has_key('submit') and form.has_key('name') and 
   form.has_key('age'):
    print 'Content-Type: text/htmlnn'
    print '''
<html><head><title>Eingegebene Werte</title></head>
<body>
 Sie heissen %(name)s und sind %(age)s Jahre alt.
</body></html>''' % {'name' : form['name'].value,
                     'age' : form['age'].value}
else:
    print 'Content-Type: text/htmlnn'
    print '''
<html><head><title>Test-Maske</title></head>
<body>
 <h3>Bitte Name und Alter eingeben:</h3>
 <form method="post" action="example1.cgi">
 <table border=0>
 <tr><td>Name:</td><td><input type="text" name="name"/></td></tr>
 <tr><td>Alter:</td><td><input type="text" name="age"/></td></tr>
</table>
<input type="submit" name="submit" value="OK"/>
</form>
</body></html>'''

Das Skript importiert zuerst die Module cgi und cgitb, wobei cgitb zum Debuggen wichtig ist: es zeigt bei einem eventuell auftretenden Fehler einen Traceback an. Daraufhin wird getestet, ob die Maske vollständig ausgefüllt wurde; wenn ja, wird deren Inhalt angezeigt, sonst die Maske selbst erzeugt.

Datenbankanbindung

In einem "richtigen" CGI-Programm wird der Inhalt der Maske wohl in eine Datenbank geschrieben werden; hier bietet Python mit dem DB API eine Standardschnittstelle, die für viele verschiedene Datenbanken implementiert ist. Hier ein kleines Beispiel für SQLite, dass das "Look & Feel" des DB API zeigen soll:

import sqlite

conn = sqlite.connect("/path/to/my.db")
cursor = conn.cursor()
cursor.execute("select * from employees where wage > 5000")
while 1:
    employee = cursor.fetchone()
    if employee is None:
        break
    print employee

Wer sich nicht mit SQL herumschlagen will, sollte einen Blick auf einen Object-Relational Mapper wie SQLObject (http://sqlobject.sourceforge.net) werfen. SQLObject erlaubt es, Datenbankzeilen direkt über Python-Objekte anzusprechen; das entsprechende SQL wird "hinter den Kullissen" automatisch generiert.

Weiterlesen: ⯈ Web-Frameworks

Über uns

Stefan Wienströer

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project

Auch interessant