Joshua Ginsberg
listspam at flowtheory.net
Thu Aug 10 16:16:10 EDT 2006
A major point of confusion on your part: The mod_python library is not CGI. It's an integrated extension to Apache. So use of the CGI modules from python-lib is entirely inappropriate here. CGI pulls things like form data from environment variables set by the gateway to the CGI script -- mod_python is part of Apache, so it gets its information from itself. If you want to use the mod_python facilities to run your script, read the mod_python documentation about what it is and how to use it. If you want to use old-fashioned CGI for your script, then this is not the appropriate forum for your question. -jag On Thu, 2006-08-10 at 10:03 -1000, Nando Drabik wrote: > Hi all, > > I would like some help fixing the problem I am stuck in. To make this as > short and simple as possible, it has mostly to do with the > cgi.FieldStorage class. I have: > > 1) mod_python installed correctly on apache2 > 2) File test.py (resides under cgi-bin): > 3) HTML file that sends out XMLHttpRequest from js > > test.py =============================== > #!/usr/bin/env python > > import sys, re, cgi > import cgitb; cgitb.enable(display=0,logdir=".") > sys.path.insert(0,'/opt/atlas/lib/python') > from jsonutils import jsonrpc > > htmlTemplate = """Content-Type: text/html > > <html> > <head><title>%(title)s</title></head> > <body> > %(body)s > </body></html> > """ > fields = cgi.FieldStorage() > req = fields.getvalue("myVar") ## THIS IS WHERE THE WHOLE THING CRAHSES > > print htmlTemplate % { 'title': "Result", 'body': req} > ===================================== > > When I access /server/cgi-bin/test.py?myVar='content', by directly > typing the URL on firefox, I do receive back "content", no problem. > > However, from an html file, if I send and XMLHttpRequest in javascript > like this: > HTML/JS snippet =========================== > var req = new XMLHttpRequest(); > rep.open("post", "http://server/cgi-bin/test.py") > req.send("myVar=10"): > ===================================== > > The script crashes when the request is sent. After debugging, I've > realized that the problem is in the FieldStorage class. Here's the > output from the error log: > > error log =============================== > problem occurred in a Python script. Here is the sequence of function > calls leading up to the error, in the order they occurred. > /srv/www/cgi-bin/atlas/test.py > > 28 fields = cgi.FieldStorage() > 29 req = fields.getvalue("myVar") > > req undefined, fields = FieldStorage(None, None, 'myVar=10'), > fields.getvalue = <bound method FieldStorage.getvalue of > FieldStorage(None, None, 'myVar=10')> > /usr/lib/python2.4/cgi.py in getvalue(self=FieldStorage(None, None, > 'myVar=10'), key='myVar', default=None) > 565 def getvalue(self, key, default=None): > 566 """Dictionary style get() method, including 'value' lookup.""" > 567 if key in self: > 568 value = self[key] > 569 if type(value) is type([]): > key = 'myVar', self = FieldStorage(None, None, 'myVar=10') > /usr/lib/python2.4/cgi.py in __contains__(self=FieldStorage(None, None, > 'myVar=10'), key='myVar') > 616 """Dictionary style __contains__ method.""" > 617 if self.list is None: > 618 raise TypeError, "not indexable" > 619 for item in self.list: > 620 if item.name == key: return True > builtin TypeError = <class exceptions.TypeError> > > TypeError: not indexable > args = ('not indexable',) > ==================================================== > > I am new to python, so I'm a bit confused. If I print the variable > 'fields' in test.py, it displays the list (FieldStorage(None, None, > 'myVar=10')) just fine, but the methods getvalue, getfirst, etc raise > TYPE exceptions(not indexable). Interestingly, the has_key method works. > > So, I have been unable to retrieve the post data from the > XMLHttpRequest. Can anyone help me figure out how to access the post > variables from mod_python residing under a cgi-bin directory? > > Thank you very much in advance! > Fernando > > > Fernando Drabik <fernando.drabik at noaa.gov> > OceanEye Web Application Developer > Coral Reef Ecosystem Division > NOAA Fisheries > _______________________________________________ > Mod_python mailing list > Mod_python at modpython.org > http://mailman.modpython.org/mailman/listinfo/mod_python
|