File: class/Extras/Code/pp3e/cgi-bin/peoplecgi.py

File: class/Extras/Code/pp3e/cgi-bin/peoplecgi.py

#!/usr/bin/python
import cgi, shelve # cgi.test() dumps inputs
form = cgi.FieldStorage() # parse form data
print "Content-type: text/html" # hdr, blank line in string
shelvename = 'class-shelve'
fieldnames = ('name', 'age', 'job', 'pay')
# main html template
replyhtml = """
<html><body>
<title>People Input Form</title>
<form method=POST action="peoplecgi.py">
 <table>
 <tr><th>key<td><input 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>
"""
# insert html for data rows at $ROWS$
rowhtml = '<tr><th>%s<td><input type=text name=%s value="%%(%s)s">\n'
rowshtml = ''
for fieldname in fieldnames:
 rowshtml += (rowhtml % ((fieldname,) * 3))
replyhtml = replyhtml.replace('$ROWS$', rowshtml)
def htmlize(adict):
 new = adict.copy()
 for field in fieldnames: # values may have &, >, etc.
 value = new[field] # display as code: quoted
 new[field] = cgi.escape(repr(value)) # html-escape special chars
 return new
 
def fetchRecord(db, form):
 try:
 key = form['key'].value
 record = db[key]
 fields = record.__dict__ # use attribute dict
 fields['key'] = key # to fill reply string
 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] # update existing record
 else:
 from person import Person # make/store new one for key
 record = Person(name='?', age='?') # eval: strings must be quoted
 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, '?') # bad submit button value
 fields['key'] = 'Missing or invalid action!'
db.close()
print replyhtml % htmlize(fields) # fill reply from dict



AltStyle によって変換されたページ (->オリジナル) /