On Mon, 10 Jul 2006 14:12:38 -0400 (EDT), [EMAIL PROTECTED] wrote:
Can you post modified code and flesh out your critique? Might be good next
step, better preparing us for IResources.
What do you think, Valentino?
For IResource the right example is most_basic which uses the following code:
from zope.interface import implements
from nevow import inevow
##
## How does a request come to the Page?
##
## or How to use Nevow without all the fancy automations
##
# This is a simple Root page object, the inevow.IResource interface
# tells us that it must implement 2 methods:
# locateChild and renderHTTP.
# locateChild is used to find children of the current page, it must return a
# tuple of (page, remaining_segments)
# if there is no page, and you want to display a 404 page, you will need to
return
# a None, () tuple.
class Root(object):
implements(inevow.IResource)
def locateChild(self, ctx, segments):
# This locateChild is 'stupid' since it can only work if the tree of
# pages is static. Anyway it will work for our simple example
if segments[0] == '':
# If the server is looking for the root page segments will be ('',)
# then renderHTTP will be called on self
return self, ()
elif segments[0] == 'foo':
# Now we received a request whose segments had in the first position
# the string foo
# like http://example.org/foo/baz/ -> ('foo', 'baz')
# after the page has been located we return it with the remaining
segments
# ('baz')
return self.foo, segments[1:]
else:
return None, ()
def renderHTTP(self, ctx):
# When the server needs to return a response to the request it will call
# the renderHTTP method that will return a string of what needs to be
sent.
return """<html><body>Hello world!<br />
<a href="./foo" id="foo">foo</a></body></html>
"""
class Foo(object):
implements(inevow.IResource)
def locateChild(self, ctx, segments):
# segments is the remaining segments returned by the root locateChild
# see segments[1:]
if segments[0] == 'baz':
return self.baz, segments[1:]
else:
return None, ()
def renderHTTP(self, ctx):
return """<html><body><h1 id="heading">You are in Foo</h1>
<a href="./foo/baz" id="baz">baz</a></body></html>
"""
class Baz(object):
implements(inevow.IResource)
def locateChild(self, ctx, segments):
return None, ()
def renderHTTP(self, ctx):
return '<html><body><h1 id="heading">You are in Baz</h1></body></html>'
# We are adding children to the pages.
# This could also happen inside the class.
root = Root()
root.foo = Foo()
root.foo.baz = Baz()
This example was written with the clear intent to just show the IResource
interface separated from Nevow. Keep in mind that this is the IResource
interface from Nevow and not the one from twisted.web.
_______________________________________________
Twisted-web mailing list
[email protected]
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web