Here is a complete code listing so that you can experiment:
#!/usr/bin/env python # show python where the 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( adapter="snakesql", database="database-object-form", autoCreate = 1, ) cursor = connection.cursor() person = web.database.object.Table("Person") person.add(column="String", name='firstName', required=True) person.addColumn(web.database.object.String(name="surname")) person.addColumn( web.database.object.StringSelect( name="profession", options=[None, 'Developer', 'Web Developer'], displayNoneAs='Not Specified' ) ) person.add(column="Bool", name='sex', displayTrueAs='Male', displayFalseAs='Female') database = web.database.object.Database() database.addTable(person) database.init(cursor) if not database.tablesExist(): database.createTables() 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(): entry = database['Person'].insert(all=form.dict()) print '<html>%s<p><a href="%s">Go Back</a></html>'%( '<h1>Entry Added</h1>' + form.frozen(), os.environ['SCRIPT_NAME'] ) 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><td>Sex</td></tr>' for row in database['Person'].values(): entries += '<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>'%( row['firstName'], row['surname'], row['profession'], row['sex'] ) entries += '</table>' print "<html>%s<h4>Entries</h4><p>%s</p></html>"%( '<h1>Enter Data</h1>'+form.html(), entries ) connection.commit() # Save the changes connection.close() # Close the connection
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.