Danke für den Hinweis, aber das Rahmenwerk ist nichts für mich - meine Frustschwelle ist heute zu gering...
Erste Schritte mit Nevow
Die
Projektseite ist zwar in schickem Lila betitelt, dennoch finde ich die Dokumentation eher dürftig. Der erste Link, "The Nevow Guide" verweist auf Trac, nicht jedoch auf lesbaren Text. Mit dem API (2. Link) will ich mich nicht als erstes auseinandersetzen und auch ein Stan-Tutorial ist nicht, was ich als "Start Here" erwartet hätte.
Also versuche ich, die Software auf gut Glück mit `easy_install nevow` in einem neuen "virtualenv" zu installieren und versuche mich an
Teil 1 des Tutorials.
Spontan missfällt mir der Modulname "rend" - für ein zusätzliches "er" hat's nicht mehr gereicht? Der gezeigte Quelltext ist zudem eigenartig formatiert und das Beispiel nicht lauffähig. Was bitte ist ein "tac"-File?
Das ist für ein Tutorial so mieß (und ich bin offenbar gerade so schlecht gelaunt), dass ich die Lust verliere, mich damit weiter zu beschäftigen.
Google verrät mir, das "tac"-Dateien mit `twistd -ny` gestartet werden können. Das Kommando habe ich zufällig, weil OS X offenbar twisted vorinstalliert hat. Da ich aber (natürlich) ein virtualenv benutze und `twistd` das System-Python, finde das dann nicht "nevow".
Ich versuche `easy_install twisted` und das müllt mir auch ein Dutzend neue Befehle in mein `bin`-Verzeichnis, aber danach geht es leider immer noch nicht: `Failed to load application: No module named nevow`. F*CK.
Wenn ich `import nevow` im Python-Interpreter aufrufe, bekomme ich eine unverständliche Warnung. Das war vor der Installation von twisted noch nicht der Fall. Das wird das Problem sein...
Ein `python -v` zeigt: Offenbar wird zope.interface angezogen und auch das darf nicht aus dem System kommen. Der dritte im Bunde muss also `easy_install zope.interface` sein. Wieso werden solche Dependencies nicht automatisch aufgelöst? Da es twisted doch schon so viele Jahre gibt, hätte ich besseres erwartet. Ich glaube, die wollen einfach keine neuen Anwender haben.
Nun kann ich folgenden Code als `tut1.py` abgespeichert mit `twistd -ny tut1.py` starten:
Code: Alles auswählen
from nevow import appserver, rend
from twisted.application import service, internet
class MyPage(rend.Page):
def renderHTTP(self, ctx):
return (
'<html>'
'<head><title>"Nevow Tutorial"</title></head>'
'<body>Hi there</body></html>')
application = service.Application("tut1")
site = appserver.NevowSite(MyPage())
webService = internet.TCPServer(8080, site)
webService.setServiceParent(application)
Zu beachten ist dabei, dass die globale Variable `application` gesetzt wird, auch wenn es unnötig erscheint. Ohne geht's nicht.
Nun kann man also "Stan" nutzen, um HTML zu erzeugen (im Tutorial ist es übrigens falsch):
Code: Alles auswählen
class MyPage(rend.Page):
def renderHTTP(self, ctx):
return flat.flatten(
T.html[
T.head[T.title["Tutorial"]],
T.body["Hi there"],
])
Oder es auch bleiben lassen... S-Expressions sollte man lieber den Sprachen überlassen, die sie auch erfunden haben. Ich bin bereits jetzt total angenervt, dass jede Änderung am Quelltext einen Neustart des Servers erfordert. Wenn ich mich bei Web-Entwicklung quälen will, benutze ich Java - da habe ich dann wenigstens eine schicke IDE...
Ich glaube, ich habe keine Lust mehr auf das Tutorial.
Wo ist jetzt die versprochene "Comet"-Unterstützung? Ein anderes
Tutorial: Obwohl ich mir recht sicher bin, dass ich das ganze richtig aus dem Text kopiert habe, läuft es nicht. Auch der an die Seite angehängte Programmcode läuft nicht. Es scheint keine Klasse `Nevow.Athena.PageWidget` zu geben aber das ist mir jetzt auch egal.
Schrott => Tonne.
Stefan