Python: Ein einfaches Gästebuch

von Kai Surendorf

You are welcome! Fast jede Website hat(te) eines. In diesem Artikel wird ein einfaches Gästebuch-Script realisiert. Nebenbei lernt der Programmierfreund noch so einiges über Datei-Manipulationen mit Python.

Von Listen und Dateien
Dateien werden in Python ähnlich wie Variablen behandelt. Es wird der Datei eine Bezeichnung zugeordnet wie einer Variable ein Wert. Mit

datei = open ('dateiname.txt', 'r')

wird die entsprechende Datei geöffnet. Das 'r' steht hierbei für read-only, ein 'w' würde für write stehen und zeitgleich (!) den bisherigen Inhalt der Datei löschen und ein 'a' stände für append und würde eventuelle Eingaben an den bisherigen Inhalt anhängen. Bei Text-Dateien, wie sie bei dem Gästebuch-Script auch Verwendung finden werden, sind die Zeilenumbrüche von Relevanz. Aus der bereits geöffneten Datei ließe sich mit ergebnis = datei.readline () die erste Zeile auslesen. Würde ergebnis = datei.readline () erneut ausgeführt, würde die zweite Zeile eingelesen. Mit ergebnis = datei.readlines () ließe sich der gesamte Inhalt der Datei auslesen. In diesem Fall wäre die Variable ergebnis eine Liste und mit ergebnis[1] würde die erste Zeile angesprochen, mit ergebnis[5] die fünfte Zeile, da die Zeilen nun die entsprechenden Felder der Liste darstellen.

Möchte man die gesamte Text-Datei in eine String-Variable einlesen, um vielleicht gleich Zugriff auf eine komplette Textvorlage zu haben, so lässt sich dies mit ergebnis = datei.read () realisieren. Alle drei Funktionsweisen haben ihre eigene Berechtigung. Das Verfahren mit einzelnen Zeilen ist beizeiten sinnvoll, wenn man eine sehr lange Datei im Rahmen einer Stapelverarbeitung abarbeiten, diese aber nicht komplett im Arbeitsspeicher halten möchte. Die gesamte Datei als Liste einzulesen, kann die Geschwindigkeit des Scripts enorm erhöhen, da Zeit raubende Festplattenzugriffe vermieden werden.

Um in eine Datei etwas hineinzuschreiben, gibt es die write-Funktion, deren Wirkung abhängig davon ist, in welchem Modus die Datei geöffnet wurde. datei.write ('Ein kleiner Eintrag') würde bei einer im append-Modus geöffneten Datei die Zeile Ein kleiner Eintrag am Ende der Datei hinzufügen.

Dateien schließen lassen sich mit dem Befehl close. datei.close () würde die geöffnete Datei wieder schließen. Das Schließen der Datei ist wichtig, da auf eine offen gelassene Datei eventuell nicht mehr zugegriffen werden kann.

Ein einfaches Gästebuch
Das Script soll die über ein Formular gemachten Angaben zum Namen des Eintragenden und den Eintrag selber übernehmen und in eine Textdatei speichern. Damit verbunden sollen noch HTML-Tags eingefügt werden, die für eine ansprechende Formatierung der Gästebuch-Einträge sorgen. Wichtig hierbei ist, dass die Textdatei im Modus 777 vorliegt, das Script also Modifikationen an ihr vornehmen kann. Die Ausgabe der Einträge soll vorerst mittels eines Server-Side-Includes erfolgen.

Das Script könnte folgendermaßen aussehen:

#!/usr/bin/python
import cgi
puffer = cgi.FieldStorage ()
name = puffer ["name"].value
eintrag = puffer ["eintrag"].value
ergebnis = "<p><b>" + name + "</b> schrieb:</p><p>" + eintrag + "</p>"
datei=open ('gaestebuch.txt', 'a')
datei.write (ergebnis)
datei.close ()
print "Location: http://www.domain.de/gaestebuch.shtml \n\n"

Das Script übernimmt in bekannter Form die Werte, die der Absender eingegeben hat und bastelt daraus einen entsprechenden Eintrag. Anschließend wird die Text-Datei, in der die Einträge gespeichert werden, geöffnet, der generierte HTML-Code angehängt, und die Datei wieder geschlossen. Die letzte Zeile leitet den Besucher wieder auf das Gästebuch um, wo sich jetzt sein Eintrag finden müsste.

Die Einträge lassen sich an entsprechender Stelle des Gästebuches mit einem Server-Side-Include, etwa

<!--include virtual="gaestebuch.txt" -->

einbinden. Etwas unerfreulich an diesem Beispiel ist, dass neue Einträge immer am Ende erscheinen und nicht am Anfang. Abhilfe schafft hier ein eigenes kleines Script, das für die Anzeige der Einträge zuständig ist. Folgendes Script ließe sich statt der Text-Datei als SSI aufrufen:

#!/usr/bin/python
import cgi
datei = open ('gaestebuch.txt', 'r')
eintraege = datei.readlines ()
datei.close ()
eintraege = eintraege.reverse ()
print "Content-Type: text/plain \n\n"
print eintraege

Hierbei werden die Daten von gaestebuch.txt in die Liste eintraege eingelesen. Mit eintraege.reverse () wird die Reihenfolge in dieser Liste umgekehrt, die neueren Einträge stehen nun also zuerst.

 

 
   Anzeigen

Navigation:    Webdesign - Programmierung - Web Grafiken - Software Guides - Tools - Templates - Schriftarten - Seminare - IT News
Partner:   Template OK - PCopen - SITEopen - PCopen Schweiz - HTMLopen Schweiz - VirtualUniversity.ch - WEB-SET.com - YesMMS - Job und Karriere