1.5.6.1 Full Code Listing

Here is a complete code listing so that you can experiment:

#!/usr/bin/env python

# show python where the web modules are
import sys
sys.path.append('../../../') 
sys.path.append('../')

import web.error; web.error.enable()
import web, web.database, web.database.object, os

connection = web.database.connect(
    type="sqlite", 
    database="../doc/src/lib/object-database-object-form.db"
)
cursor = connection.cursor() 

person = web.database.object.Table("Person")
person.addColumn(
    web.database.object.String(
        name="firstName", 
        treatNullStringAsNone=False
    )
)
person.addColumn(web.database.object.String(name="surname"))
person.addColumn(
    web.database.object.StringSelect(
        name="profession", 
        options=[None, 'Developer', 'Web Developer'], 
        displayNoneAs='Other'
    )
)
database = web.database.object.Database()
database.addTable(person)
database.init(cursor)

if not database.tablesExist():
    database.createTables()
    print "Created Table"

form = database['Person'].form() 

print web.header()               # Print the content-type information
if len(web.cgi) > 1:             # Assume form submitted
    form.populate(web.cgi)
    if form.valid():      
        print '<html>%s<p><a href="%s">Go Back</a></html>'%(
            '<h1>Entry Added</h1>' + form.frozen(),
            os.environ['SCRIPT_NAME']
        )
        entry = database['Person'].insert(all=form.dict())
    else:
        print """<html><h1>Error</h1><p>There were some invalid fields. 
            Please correct them.</p>%s</html>"""%(form.html())
else:
    entries = '<table border="0"><tr><td>Firstname</td>'
    entries += '<td>Surname</td><td>Profession</td></tr>'
    for row in database['Person'].values():
        entries += '<tr><td>%s</td><td>%s</td><td>%s</td></tr>'%(
            row['firstName'],
            row['surname'],
            row['profession']
        )
    entries += '</table>'
    print "<html>%s<h4>Entries</h4><p>%s</p></html>"%(
        '<h1>Enter Data</h1>'+form.html(),
        entries
    )
connection.commit()

You can test this example by starting the test webserver in scripts/webserver.py and visiting http://localhost:8080/doc/src/lib/webserver-web-database-object-form.py on your local machine.

See About this document... for information on suggesting changes.