[mod_python] Re: help needed with forms' parameters handling

Tino Wildenhain tino at wildenhain.de
Fri Mar 9 23:43:51 EST 2001

Hi Petar,

I suppose after a couple of headaches you may want to try out
zope as well ;) http://www.zope.org/
It saves you from most of the work with forms and many more.
Hard to grasp the principe of operation at first but profitable
at the end.


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
> -------------------------------------------
> --
> http://mail.python.org/mailman/listinfo/python-list

More information about the Mod_python mailing list