CherryPy + Ajax (Prototype) -> Response ist nur Source-Co

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
localhorst
User
Beiträge: 2
Registriert: Sonntag 15. Juni 2008, 16:08

Mahlzeit zusammen!

Vorab meine "Umgebung": System: WinXP. Python und CherryPy ist installiert und auch funktionsfähig!

Meine Python-Datei sieht folgendermaßen aus:

Code: Alles auswählen

#getContent.py
import cherrypy

class Application_cl(object):
    @cherrypy.expose
    def index(self):
       return file("foobar.html")

cherrypy.tree.mount(Application_cl())

def main():
    cherrypy.config.update("config.cfg")
    cherrypy.server.quickstart()
    cherrypy.engine.start()

if __name__ == '__main__':
    main()

Meine Datei "foobar.html" enthält CSS, JavaScript und es funtzt soweit auch (statische Ressourcen werden angezeigt).

Wenn ich dann mittels Terminal "python getContent.py" aufrufe, kann ich meine Site über "localhost:8080" erreichen.

Mein Problem ist, dass ist in meinem JavaScript-Bereich folgendes prototype-Objekt nutze:

Code: Alles auswählen

new Ajax.Updater("content", 'py/getContent.py', { method:"post" });
Ich will also erreichen, dass der Inhalt von getContent.py (= HelloWorld-Script von oben) in mein DIV mit der ID "content" geladen wird. Nur leider wird STATT "Hello World!" der komplette Source-Code in meinem Div angezeigt.

Wisst Ihr, wie ich das umsetzen kann, dass ich "Hello World!" in meinem Div stehen habe und nicht meinen Source-Code???



Vielen Dank für die Hilfe!

Greets, localhorst
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo localhorst!

Willkommen im Python-Forum!

Ungezielter Schuss aus der Hüfte:

Code: Alles auswählen

new Ajax.Updater("content", '/', { method:"post" });

Vielleicht... :roll:

Oder so:

Code: Alles auswählen

...
class Application_cl(object):
    @cherrypy.expose
    def index(self):
       return file("foobar.html")
    
    @cherrypy.expose
    def new_content(self):
        return "Ich bin der neue Content"
...

Code: Alles auswählen

new Ajax.Updater("content", '/new_content', { method:"post" });

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
localhorst
User
Beiträge: 2
Registriert: Sonntag 15. Juni 2008, 16:08

Vielen vielen Dank Gerold!!! Da wäre ich nie drauf gekommen, dass man eine Methode an dieser Stelle aufrufen muss und kein Script! Super!

Nochmals Danke und einen schönen Sonntag noch :)
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Nein, du rufst keine Methode auf, sondern eine URL. Was der Server dann damit macht ist dann wiederum deine Sache.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Offenbar liefert CP mit `py/getContent.py` den eigentlichen Programmcode wie eine einfache statische Datei aus. Das sollte natürlich nicht sein, ist für die eigentliche Anwendung wenig nützlich (lies: gar nicht) und sollte selbstverständlich keinesfalls im Produktionsbetrieb passieren!

CP bindet IIRC den Anwendungscode nach dem Schema `/controller/action` an URLs und verwendet dabei nicht die Endung `.py` (wie eigentlich außer Google [z.B. in ihren FAQ] sehr wenige mir geläufige Web-Angebote).
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Y0Gi hat geschrieben:Offenbar liefert CP mit `py/getContent.py` den eigentlichen Programmcode wie eine einfache statische Datei aus.
Hallo Y0Gi!

Das ist es was mich zuerst so verwirrt hat. Das macht CP nicht. Das ist nur dann denkbar, wenn es über eine eigene *staticdir*-Einstellung dazu angewiesen wurde.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

gerold:
Ja, ich habe dabei angenommen, dass die entsprechende Datei statisch (wie z.B. ein Bild) ausgeliefert worden sein musste. Vielleicht wurde einfach das gesamte Applikationsverzeichnis als statische Quelle freigegeben und das kommt dabei raus. Denn umgekehrt müsste man (sofern überhaupt möglich) bewusst CP so konfigurieren, dass es eine URL mit der Endung `.py` gibt - nehme ich zumindest an.
Antworten