[Zope3-Users] HTTP Post Request Handling

Gary Poster gary at zope.com
Sat Jul 16 23:14:55 EDT 2005


On Jul 16, 2005, at 8:10 PM, John Smith wrote:

> Dear All,
>
> I hope I have the right mailing list. Perhaps someone
> can help me with a fairly basic question.
>
> When I used Zope 2, I used the following idiom for
> form submission.
>
> Send http POST to Script(Python) or External Method,
> which would then return a ZPT like this:
> return context.myZPT(arg1=xyz, arg2=abc, etcetera). In
> the ZPT, I could then access arg1, arg2 via the
> 'options' TAL name.

FWIW, the same behavior holds true in Zope 3 as well for  
"zope.app.pagetemplate.ViewPageTemplateFile"s.  They are generally  
attributes on a view class, though, so a method on the view might  
pass arguments to the template (that are then available in 'options',  
as you are familiar).  However, since the template also has the view,  
as you note below, you might not need to.

> Now, I am getting along OK with Zope3. I understand
> that the basic TAL namespaces available in a ZPT are
> view, request and context.
>
> As far as I can tell from documentation and examples,
> POST requests are handled by the
> self.request.response.redirect idiom.

Actually, no.  The standard idiom is to self-post.  The view class  
(in __call__, at its most primitive level) is then responsible for  
deciding what to draw.  If you do an actual redirect (in Zope 2 and  
Zope 3) then you are responsible for passing things around in the  
query string, or the session, or an annotation, or what have you.

> My problem with
> this method is that it causes the instantiation of a
> new view component, so I cannot hold state with the
> 'view'.

Why do you need to redirect?  Do you actually mean an HTTP redirect?   
Or are you looking up a different view from within the first view's  
__call__, and rendering it for the first view to return?  Not sure  
what you are doing.

> I would be very grateful if anyone could tell me how I
> can pass arguments to the rendered page template. I do
> not wish to set attributes on the content/context
> object as the form values from the POST request are
> specific to the request. so I cannot hold state with
> the 'context'.
>
> I don't want to use cookies as the form has to work in
> environments where cookies are disabled.
>
> I tried searching the interface specification for
> 'request' to see if there was an analogue of the Zope2
> request.setAttribute function, but could not find one.

It is possible to annotate the request, but you shouldn't have to for  
this use case.  That should be used sparingly.

Gary


More information about the Zope3-users mailing list