[Tutor] environment data [CGI]

Danny Yoo dyoo@hkn.eecs.berkeley.edu
Fri, 28 Dec 2001 22:45:02 -0800 (PST)


On Fri, 28 Dec 2001, Sean 'Shaleh' Perry wrote:

> > cgi module leaves me baffled, but if I can just read the bloddy
> > environment variable I can run with it from there.
> > 
> 
> import os.environ
> 
> print os.environ['MY_DATA']
> 
> The cgi module for python passes os.environ as a parameter:
> 
> environ = os.environ
> 
> environ['REQUEST_METHOD']
> 
> cgi.py is a lot like rfc822, it parses headers and other data storing
> them in a dictionary and giving you access to them as if the returned
> item was a dictionary itself.


The documentation hides a nice example of the cgi module in action here:

    http://www.python.org/doc/lib/node295.html

###
form = cgi.FieldStorage()
if not (form.has_key("name") and form.has_key("addr")):
    print "<H1>Error</H1>"
    print "Please fill in the name and addr fields."
    return
print "<p>name:", form["name"].value
print "<p>addr:", form["addr"].value
###

So cgi.FieldStorage() almost behaves like a dictionary, with the exception
that to get at the actual value, we need to do something like
'form[key].value' instead of just 'form[key]'.  Why?

There are good reasons for this: forms can have more than strings!  Their
values can be uploaded files as well, and the bottom of the link:

    http://www.python.org/doc/lib/node295.html

talks about this in more detail.  That's one big reason why
cgi.FieldStorage() is a little more awkward to use than a dictionary.


Also, there's a lot of resources you can look at for more CGI examples.  
Here are two that may interest you:

    http://python.org/topics/web/basic-cgi.html
    http://www.devshed.com/Server_Side/Python/CGI/page1.html


The devshed.com article is especially good, as it has a lot of examples
with commentary.