1.5.6.1 Full Code Listing

###
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 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.