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