[colubrid] ObjectApplication vs. RegexApplication
Verfasst: Mittwoch 8. März 2006, 09:19
Erstmal zwei Links:
http://wiki.python.de/Colubrid/ObjectApplication
http://wiki.python.de/Colubrid/RegexApplication
oder
http://wsgiarea.pocoo.org/colubrid/docu ... pplication
http://wsgiarea.pocoo.org/colubrid/docu ... pplication
Ich hatte mir erst ObjectApplication angesehen und fand das super. Gerade weil man schön Bereiche auf Klassen auftrennen kann, das gefällt mir sehr gut.
Nun ist es aber so, das ich folgende Programmteile/URLs realisieren möchte:
/download/verz-1/.../verz-n
/upload/datei
/info/
Dabei möchte ich das Aufteilen in die drei Klassen "download", "upload" und "info" um dann die jeweiligen Funktionen schön zu trennen.
Das geht aber nicht:
Weil bei download.index() der Pfad nur übergeben wird, wenn es nur ein Verz gibt... Wenn es zwei Verzeichnisse sind, gibt es ein 404 Fehler... Das ist schade...
Nun könnte ich eine RegexApplication machen mit:
Dabei gefällt mir allerdings nicht, das ich hinterher eine riesige Klasse klasse mit allen Funktionen hab.
http://wiki.python.de/Colubrid/ObjectApplication
http://wiki.python.de/Colubrid/RegexApplication
oder
http://wsgiarea.pocoo.org/colubrid/docu ... pplication
http://wsgiarea.pocoo.org/colubrid/docu ... pplication
Ich hatte mir erst ObjectApplication angesehen und fand das super. Gerade weil man schön Bereiche auf Klassen auftrennen kann, das gefällt mir sehr gut.
Nun ist es aber so, das ich folgende Programmteile/URLs realisieren möchte:
/download/verz-1/.../verz-n
/upload/datei
/info/
Dabei möchte ich das Aufteilen in die drei Klassen "download", "upload" und "info" um dann die jeweiligen Funktionen schön zu trennen.
Das geht aber nicht:
Code: Alles auswählen
import posixpath
from colubrid import ObjectApplication
class base(object):
def _info(self, methodname):
self.request.write("<h3>Aufruf von '%s'</h3>\n" % methodname)
class index(base):
def index(self):
self._info('index.index') # Globale info-Methode aufrufen
class download(base):
def index(self, path="/"):
self._info('download.index')
self.request.echo("path:", path)
class upload(base):
def index(self, filename=None):
self._info('upload.index')
self.request.echo("filename:", filename)
class info(base):
def index(self):
self._info('info.index')
class DispatcherApplication(ObjectApplication):
"""
Die Haupt-Klasse, setzt die Programmlogik um.
"""
# Setzt den Objekt-Baum für die URLs zusammen
root = index
root.download = download
root.upload = upload
root.info = info
def process_request(self):
super(DispatcherApplication, self).process_request()
self.on_close()
def on_close(self):
"""
URL Liste aufbauen, damit sie direkt "anklickbar" sind
"""
self.request.write("<p><h3>Available URLs:</h3>\n")
for url in ("", "download", "download/verz1", "download/verz1/verz2",\
"upload", "upload/file1", "info", "NotExists!"):
self.request.write(
'<a href="%s">/%s</a><br/>\n' % (
posixpath.join(self.request.environ["SCRIPT_ROOT"], url),
url
)
)
self.request.write("</p>\n")
app = DispatcherApplication
if __name__ == '__main__':
from colubrid import execute
execute()
Nun könnte ich eine RegexApplication machen mit:
Code: Alles auswählen
urls = [
(r'^$', 'index'),
(r'^download/(.*?)$', 'download')
(r'^upload/(.*?)$', 'upload')
(r'^info/$', 'info'),
]