Doch bekomm ich im Aufruf im Browser folgende Fehlermeldung:
und wenn ich das Programm mit meinem Debugger laufen lasse bekomme ich diese Meldung:Serverfehler!
Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.
Fehlermeldung:
Premature end of script headers: peoplecgi.py
Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 500
Traceback (most recent call last):
File "<string>", line 231, in run_nodebug
File "C:\xampp\htdocs\Vanessa\Zat\Step6\WebBasedShelve\cgi-bin\peoplecgi.py", line 80, in <module>
print replyhtml % htmlize(fields)
KeyError: "('name', 'age', 'job', 'pay')"
Code: Alles auswählen
#!C:\Python26\python.exe -u
import cgi, shelve
form = cgi.FieldStorage()
print "Content-type: text/html"
shelvename = 'class-shelve'
fieldnames = ('name', 'age', 'job', 'pay')
replyhtml = """
<html>
<title>People Input Form</title>
<body>
<form method=POST action="peoplecgi.py">
<table>
<tr><th><imput type=text name=key value="%(key)s">
$ROWS$
</table>
<p>
<input type=submit value="Fetch", name=action>
<input type=submit value="Update", name=action>
</form>
</body>
</html>
"""
rowhtml = '<tr><th>%s<td><input type=text name=%s value="%%(%s)s">\n'
rowshtml = ''
for field in fieldnames:
rowshtml += (rowhtml % ((fieldnames,) * 3))
replyhtml = replyhtml.replace('$ROWS$', rowshtml)
def htmlize(adict):
new = adict.copy()
for field in fieldnames:
value = new[field]
new[field] = cgi.escape(repr(value))
return new
def fetchRecord(db, form):
try:
key = form['key'].value
record = db[key]
fields = record.__dict__
fields['key'] = key
except:
fields = dict.fromkeys(fieldnames, '?')
fields['key'] = 'Missing or invalid key!'
return fields
def updateRecord(db, form):
if not form.has_key('key'):
fields = dict.fromkeys(fieldnames, '?')
fields['key'] = 'Missing Key Input!'
else:
key = form['key'].value
if key in db.keys():
record = db[key]
else:
from person import Person
record = Person(name='?', age='?')
for field in fieldnames:
setattr(record, field, eval(form[field].value))
db[key] = record
fields = record.__dict__
fields['key'] = key
return fields
db = shelve.open(shelvename)
action = form.has_key('action') and form['action'].value
if action == 'Fetch':
fields = fetchRecord(db, form)
elif action == 'Update':
fields = updateRecord(db, form)
else:
fields = dict.fromkeys(fieldnames, '?')
fields['key'] = 'Missing or invalid action!'
db.close()
print replyhtml % htmlize(fields)