Tipps zum Entwurf einer Zope3-View-Klasse
Man kann View-Klassen auf recht unterschiedliche Art und Weise schreiben. Hier folgt der Ansatz, der sich als praktikabel erwiesen hat.
Wer von Zope 2 kommt, wird vielleicht viel mit redirects arbeiten (wollen), aber das ist gar nicht nötig.
Wenn eine Browser-Page keine Verzweigungen (z.B. mehrstufiges
Formular) oder Fehlerbehandung hat, braucht man beim Entwurf der
View-Klasse nichts weiter zu beachten.
Das folgende Beispiel soll
zeigen, wie man effizient mit mehreren Submit-Buttons umgehen kann und
auch eine Fehlerbehandlung machen kann.
Das Beispiel-Template hat zwei Submit-Buttons. Einen darf der Nutzer anklicken, der andere führt zu einer Fehlermeldung.
Im Quellcode sieht das so aus:
<html metal:use-macro="context/@@standard_macros/view">
<body metal:fill-slot="body">
<!-- Fehleranzeige -->
<div class="page_error"
tal:define="error view/error"
tal:condition="error"
tal:content="error"
i18n:translate="">
Page Error
</div>
<form action="@@services.html" method="post">
<input type="submit" name="submit_me" value="Klick mich" />
<input type="submit" name="not_submit" value="Klicken verboten!" />
</form>
</body>
</html>
Die zugehörige View-Class hat folgendes Aussehen:
class ExampleView(object):
error = '' # der Standard für error ist '', also kein Fehler (siehe Template)
def __call__(self, *args, **kw):
"""Methode, die aufgerufen wird, um den Submit zu behandeln."""
if "submit_me" in self.request:
# wenn der Button mit dem Namen "submit_me" angeklickt wurde
# gibt es einen Eintrag dafür in self.request
self._handleSubmitMe()
elif "not_submit" in self.request:
self._handleForbiddenSubmit()
# Rendern des Templates
return super(ExampleView, self).__call__(*args, **kw)
def _handleSubmitMe(self):
# Code zur Behandlung des Anklickens von "submit_me"
pass
def _handleForbiddenSubmit(self):
# beschreiben des error-Attributes, welches nachher im Template ausgelesen wird
self.error = "Erwischt! Das ist verboten!"
- Category(s)
- Zope 3
- The URL to Trackback this entry is:
- http://blog.gocept.com/tipps-zum-entwurf-einer-zope3-view-klasse/tbping