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.

by Michael Howitz posted at 2006-01-30 11:19 last modified 2006-01-30 11:19

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