im neuen buch "objetkorientierte programmierung" von m. weigand ist ein chat zu finden. die funktionsweise läßt allerdings insofern zu wünschen übrig, als dass jeder teilnehmer die seite manuell reloaden muss um zu sehen was sein gegenüber geschrieben hat. hier der code ergänzt durch einen try und except um fehlermeldung vom server zu bekommen. ich musste auf meinem webserver den code von weigand ändern. open statt file, da der python interpreter dort file offensichtlich nicht kennt. für uns hier also interessant, was sich im try block abspielt
Code: Alles auswählen
#!/usr/bin/python
import cgi, traceback, sys
try:
class Dialog:
def __init__(self, datei):
self.datei=datei
try:
f=open(datei, 'r')
self.textzeilen=f.readlines()
f.close()
except:
self.textzeilen=[]
f=open(datei, 'w')
f.close()
def aktualisiere(self, nick, beitrag):
#Neuen Beitrag in Dialog einfuegen
if len(self.textzeilen)>10:
self.textzeilen=self.textzeilen[-10:]
neueZeile=nick + ': ' + beitrag + '<br>\n'
self.textzeilen.append(neueZeile)
f=open(self.datei, 'w')
for z in self.textzeilen:
f.write(z)
f.close()
def __str__(self):
#liefert Darstellung des Dialogs als HTML-Text
dialog=''
for z in self.textzeilen:
dialog+=z
return dialog
class Chatraum:
def __init__(self):
self.form=cgi.FieldStorage()
self.dialog=Dialog('/var/www/web188/html/crossover_python/dialog.txt')
self.beitrag=self.form.getvalue('beitrag')
self.nick=self.form.getvalue('nick')
self.typ=self.form.getvalue('typ','normal')
if self.beitrag:
if self.typ=='fluestern':
text='<font size="-1" color=#9F9F9F>%s </font>'
elif self.typ=='schreien':
text='<font size="+2" color=#FF0000>%s </font>'
else:
text='%s'
text=text%(self.beitrag,)
self.dialog.aktualisiere(self.nick, text)
def __str__(self):
seite = '''Content-Type: text/html
<html>
<head><title>Python-Chat</title></head>
<body><h1>Python-Chat</h1>
%s <hr>
<form action="/cgi-bin/chat_b.py" method="POST">
<input type="hidden" name="nick" value="%s">
Ich sage:&
<input type="text" name="beitrag" size="40" maxlength="40">
<input type="submit" value="OK"><br><br>
<input type="radio" name="typ" value="normal"
checked="checked"> normal  
<input type="radio" name="typ" value="schreien">
schreiend  
<input type="radio" name="typ" value="fluestern"> fl&sternd
</form></body></html>'''%(self.dialog,self.nick)
return seite
print Chatraum()
except:
pfad='/var/www/web188/html/crossover_python/'
dateiname='fehler.txt'
text=pfad+dateiname
sys.stderr=open(text, 'a')
print traceback.print_exc(sys.exc_info()[2])
sys.stderr.close()
mfg
rolgal