Vorbilder könnten IMHO Seaside, Wicket und ja, auch JSF oder ASP.NET sein.
Nehmen wir einmal die "Arc-Challenge" als Beispiel. Eine Webanwendung soll nach einem Namen fragen, danach eine Seite mit einem Link anzeigen und nach Klick auf den Link den Namen wieder anzeigen. Der Zustand der Webanwendung (der Name) soll dabei unsichtbar bleiben.
Wer Wicket kennt, dem wird dieses adhoc-Beispiel vertraut vorkommen:
Code: Alles auswählen
class Start(web.Page):
def setup(self):
return web.Form('f', 'submit')
def submit(name=None):
self.session.name = name
self.goto(Delay)
class Delay(web.Page):
def setup(self):
return web.Link('l', Display)
class Display(web.Page):
def setup(self):
return web.Label('l', self.session.name)
Code: Alles auswählen
<html><body><a web:id="l" href="#">Weiter</a></body></html>
Die Anwendung startet, indem `Start` erzeugt wird, was eine Seite darstellt, die ein Formular enthält, welches über "f" mit der Methode `submit` assoziiert wird, sodass beim Absenden der Formulardaten dann in der wiederhergestellten Seite `submit` aufgerufen wird. Der Name wird gespeichert und die Kontrolle wird an ein anderes Seitenobjekt übergeben, welches dann auch gebaut wird und welches nur einen Link anzeigt. Gleichzeitig wird eine URL generiert und derart gespeichert, dass später ein Link auf den Link dazu führt, dass `Display` dargestellt wird.
Man könnte es noch extremer machen und (wie Seaside) auf Templates verzichten:
Code: Alles auswählen
class Start(web.Component):
def render(self, html):
with html.form('submit'):
html.text("Name: ")
html.input('name')
html.submit()
def submit(self, name=None):
self.session.name = name
self.goto(Link)
class Link(web.Component):
def render(self, html):
html.a(Display, 'Weiter')
class Display(web.Component):
def render(self, html):
html.text("Hallo, ", self.session.name)
Stefan