[mod_python] help needed with forms' parameters handling

Gregory (Grisha) Trubetskoy grisha at verio.net
Fri Mar 9 13:39:34 EST 2001


This is probably because FieldStorage indeed doesn't have "items()" - just
like it says ;-)

May be in the future I'll add it. Until then - you'll have to copy it to
real dictionary, or you can subclass FieldStorage and add your own
items().

Grisha

On Fri, 9 Mar 2001, Petar Karafezov wrote:

> Hello all -
>
> I am running Apache/1.3.14 (Unix) mod_python/2.7.2 Python/2.0. At this point
> I am not even sure that this is a mod_python issue, as I have seen this
> same behavior before I ported my cgi to mod_python. I am not sure what to do
> at this point..
>
> Here's the issue:
>
> When you do a POST to a python script you obtain the parameters using the
> util.FieldStorage, when using cgi it's cgi.FieldStorage. The returned result
> is a dictionary { key, value }. Everything is OK if you just what to work
> with this dictionary. However, if you try to pass this dictionary object to
> urllib.urlencode, we raise an exception:
>
> Mod_python error: "PythonHandler parse2"
>
> Traceback (most recent call last):
>
>   File "/usr/local/lib/python2.0/site-packages/mod_python/apache.py", line
> 189, in Dispatch
>     result = object(self.req)
>
>   File "/usr/local/apache/htdocs/test/parse2.py", line 147, in handler
>     params=urllib.urlencode(form)
>
>   File "/usr/local/lib/python2.0/urllib.py", line 1086, in urlencode
>     for k, v in dict.items():
>
> AttributeError: 'FieldStorage' instance has no attribute 'items'
>
>
> Now, the funny part is that if I get this object 'form' - which was defined
> as form=util.FieldStorage(req) and just get the keys and values and form a
> new dictionary, I can pass that new one to urllib.urlencode with no
> problems.
>
> ...
>     newparams={}
>     for key in form.keys():
>           newparams[key]=form[key]
>     params=urllib.urlencode(newparams)
> ...
>
> Again, I run into the same issue with both util.FieldStorage when working
> with mod_python and with cgi.FieldStorage when using my cgi version.
>
> I am quite happy with this workaround until I bumped into a different issue,
> which I am not exactly sure if it's related or not. When there're multiple
> checkboxes on a form:
>
> <input type="checkbox"  name="frequencies" value="DEM" priority="6" checked>
> <input type="checkbox"  name="frequencies" value="HLF" priority="6">
> <input type="checkbox"  name="frequencies" value="DAY" priority="6">
> <input type="checkbox"  name="frequencies" value="WEK" priority="6">
>
> and we have selected more than 1, then the form parameter value gets passed
> to the server as an array. For example, if I'd select DEM and DAY from the
> checkboxed above, my params would be:
>
> 'frequences' : ['DEM','DAY']
>
> This is all great, but when I pass the parameters to the server - my python
> script is playing the role of a proxy, then I am passing as value for
> 'frequences' the STRING "['DEM','DAY']" and not the ARRAY ['DEM','DAY'].
>
> So, somewhere in what I do/use the array gets converted to a string. The way
> I see it is:
>
> 1) It could be the python's FieldStorage when I originally get the keys and
> values
> 2) It could be that funky dictionary rewriting that I am doing before I pass
> the form parameters to urllib.urlencode.
> 3) I could be something in what urlencode does.
>
>
> I am not sure where to look at this point.
>
> Any ideas, anyone ?? Any help would be greatly appreciated!
>
> Thanks for your help!
>
> regards,
>
> Petar Karafezov
>
> MetaMarkets.com
> 415-575-3015
> -------------------------------------------
> Investing Out Loud at
> http://www.metamarkets.com
> -------------------------------------------
>
>
> _______________________________________________
> Mod_python mailing list
> Mod_python at modpython.org
> http://www.modpython.org/mailman/listinfo/mod_python
>




More information about the Mod_python mailing list