[Twisted-web] Cannot redirect to a SessionWrapper-wrapped page (example code included)

kgi iacovou at gmail.com
Mon Jul 16 11:01:14 EDT 2007


On Monday 16 July 2007 17:11:25 glyph at divmod.com wrote:
> The guard wrapper is being re-created on every hit in the child_foopage
> method.  So, the session storage is getting re-created on every hit,
> which means that your session isn't being stored anywhere that the
> resource can access it.  So each time the browser hits it, it tries to
> recreate its session.
>
> Put the guard wrapper somewhere persistent so that it will be the *same*
> guard wrapper accessed on subsequent hits, and it will work.

Yes, that's it; thanks Glyph.

Actually, while we're on the subject, there's one more oddity. It's not 
terribly important for reasons I'll describe below, but it's still something 
that confuses me.

If I patch the file in my previous attachment to create and reuse a single 
persistent guard wrapper, like this:

class TopLevel ( rend.Page ):

    def __init__ ( self ):
        rend.Page.__init__ ( self )
	self.gresource = createGuardedResource()

    [...]

    def child_foopage ( self, ctx ):
        return self.gresource

... then the looping disappears BUT I get the "cannot render livepage more 
than once" error. The way to overcome this seems to be to uncomment 
the "child_()" method in FooPage():

    def child_ ( self, ctx ):
        return FooPage()

... so that any attempt to access the path of the LivePage afresh will get a 
new instance of the page. I want this behaviour anyway, because I don't want 
browser refreshes to throw up an error.

However, I'm confused as to why this error would occur the FIRST time I access 
the LivePage after GuardWrapper authentication. As far as I can tell, I've 
just rendered the page once.

Regards,

Ricky



More information about the Twisted-web mailing list