[mod_python] clarity on request.form

Graham Dumpleton grahamd at dscpl.com.au
Wed May 24 01:08:12 EDT 2006


On 24/05/2006, at 3:03 PM, Graham Dumpleton wrote:

> Time for a couple more questions. :-)
>
> On 24/05/2006, at 1:55 PM, David Bear wrote:
>
>>>> Unfortunately PSP doesn't play too nice with publisher as far as
>>>> form creation and will create its own if you access "form" from
>>>> inside PSP page. If request is a GET request, although redundantly
>>>> created, the form will still work. If a POST request though, there
>>>> will be no fields as publisher already consumed it.
>>>
>>> So, in order to pass req.form to a psp, I would need to copy it to
>>> some object? simple
>>>
>>>    thisform = req.form
>>>    vars = thisform
>>>    return psp.PSP('somepsp.html', vars)
>>>
>>> won't work? or will the assignment make a copy?
>>>
>>
>> I just tried
>>
>>     myform = copy.deepcopy(req.form)
>>
>> and it failed..
>>
>> where is req.form documented? I'm looking for its methods.
>>
>>>>
>>>> The work around for this is to use something like:
>>>>
>>>>     page = psp.PSP(.....)
>>>>     page.run({"form": form})
>>>>     ...
>>>>
>>>> There was discussion about having PSP understand convention of  
>>>> req.form
>>>> being populated by publisher and use it if it exists, but no  
>>>> consensus
>>>> was reached on whether it was a good idea or not.
>
> You don't need to make a deep copy. The only thing wrong with what  
> you had is
> that vars has to be a dictionary.
>
>    thisform = req.form
>    vars = { "form": thisform }
>    return psp.PSP('somepsp.html', vars=vars)
>
> Then just access methods of form object (ie., FieldStorage) through  
> "form" in PSP
> just like you would normally if using FieldStorage object. Eg.
>
>   form.get("field")
>
> etc.

Here is an example which I think will work. This will iterate over  
all fields and show
you what they are.

<html>

<head>
<title>Form Values</title>
</head>

<body>

<h1>Form Values</h1>

<p>
<table>

<thead>
<tr>
<th>Name</th>
<th>Value</th>
</tr>
</thead>

<tbody>
<%
keys = form.keys()
keys.sort()
for key in keys:
     # indent
%>
     <tr>
     <td><%=key%></td>
     <td><%=form[key]%></td>
     </tr>
</tbody>
<%
# end for
%>

</table>
</p>

</body>
</html>



More information about the Mod_python mailing list