[Web-SIG] Re: Form field dictionaries

Simon Willison cs1spw at bath.ac.uk
Fri Oct 24 12:31:13 EDT 2003


Ian Bicking wrote:
> I think this is already really decided -- if (and only if) there are 
> multiple values, then a list should appear in the output.  I.e., {'a': 
> ['1', '2']}.  This is how cgi works, and how almost all Python request 
> objects work.

I don't have enough practical Python web development experience to back 
this up, but it seems to me that this could lead to an awful lot of 
unhandled exceptions. For example:

username = GET['username'].lower()

This would work fine provided no one fed two username values to the 
script, at which point it would die with an exception:

Traceback (most recent call last):
   File "<pyshell#44>", line 1, in -toplevel-
     GET['username'].lower()
AttributeError: 'list' object has no attribute 'lower'

Adding exception handling to every piece of code that accesses string 
values from a form field dictionary would be a pretty tall order.

One alternative might be some kind of enhanced form field access object 
that adds a layer of validation. For example:

form = web.cgi.ValidatingForm()

try:
     username = form.get_string('username')
     id = form.get_int('id')
     permissions = form.get_list('permissions')
except ValidationError:
     print 'Invalid form data'
     redisplayform()

Form validation like this though is really a whole other topic.

-- 
Simon Willison
Web development weblog: http://simon.incutio.com/




More information about the Web-SIG mailing list