modpython - publisherhandler - addhandler/sethandler?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
gleez
User
Beiträge: 4
Registriert: Donnerstag 18. Mai 2006, 18:59

Hallo erst mal...

Mir stellt sich folgendes Problem:
Ich habe eine index.py datei im ~/www/ verzeichnis die etwa so aussieht:

Code: Alles auswählen

 def index(req):
  return 'hallo index<img src="img/index.jpg">'

 def other(req):
  return 'hallo other<img src="img/other.jpg">'
Wenn nun ich Apache mit folgenden Zeilen konfiguriere:

Code: Alles auswählen

  SetHandler mod_python
  PythonHandler mod_python.publisher
kann ich mit folgenden Adressen im Browser etwas erreichen:
* localhost/, localhost/index, localhost/index.py, localhost/index.py/index
ergibt: 'hallo index', das bild wird jedoch nicht angezeigt.

* localhost/other, localhost/index/other, localhost/index.py/other
ergibt: 'hallo other', das bild wird auch nicht angezeigt.

Konfiguriere ich Apache aber mit:

Code: Alles auswählen

  AddHandler mod_python.py
  PythonHandler mod_python.publisher
passiert folgendes:
* localhost/, localhost/index.py
funktioniert einwandfrei (inklusieve bilder)

* localhost/index, localhost/me
ergibt: 404 not found

* localhost/index.py/other
ergibt: 'hallo other', jedoch immer noch ohne bilder

----------------------

Was muss ich tun damit ich die schönen Adressen von 'SetHandler' benutzen kann, aber auch schöne Bildchen habe?

Ach ja:
- Apache 2.0.54
- Python 2.4
- Ubuntu

dass wars dann auch schon.
Danke

gleez
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Was zeigt er denn bei http://localhost/img/index.jpg an?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
gleez
User
Beiträge: 4
Registriert: Donnerstag 18. Mai 2006, 18:59

Bei SetHandler:

Code: Alles auswählen

Mod_python error: "PythonHandler mod_python.publisher"

Traceback (most recent call last):

  File "/usr/lib/python2.3/site-packages/mod_python/apache.py", line 299, in HandlerDispatch
    result = object(req)

  File "/usr/lib/python2.3/site-packages/mod_python/publisher.py", line 98, in handler
    path=[path])

  File "/usr/lib/python2.3/site-packages/mod_python/apache.py", line 454, in import_module
    f, p, d = imp.find_module(parts[i], path)

ImportError: No module named index


und bei AddHandler .py
Wird das Bild korrekt angezeigt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich denke, du solltest eine Rewrite-Rule setzen, dass wenn es eine solche Datei gibt, dass du dann die datei zurückgibtst, wenn nicht dann an den mod_python Publisher weiterreichts.

Oder einfach mod_python in die Tonne treten und etwas richtiges benutzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
gleez
User
Beiträge: 4
Registriert: Donnerstag 18. Mai 2006, 18:59

Was sollte man denn benutzen?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

WSGI oder TurboGears, oder Django, oder was eher einfach gestrickt ist und dem mod_python Publisher ähnelt: CherryPy oder RhubarbTart (WSGI kompatibel). Es gibt viel Auswahl, um nicht zu sagen zu viel.

Siehe auch [wiki]Web Frameworks[/wiki].
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
gleez
User
Beiträge: 4
Registriert: Donnerstag 18. Mai 2006, 18:59

Besten Dank. Ich seh mich mal um.
Jay-Pi
User
Beiträge: 19
Registriert: Dienstag 13. Februar 2007, 14:10

Hallo,

der Artikel ist zwar etwas älter, aber hier die Ursache:

SetHandler mod_python

Versucht ALLE Dateien im www-dir als mod_python zu behandeln

der
AddHandler mod_python .py
nimmt nur die Datein mit der Dateiendung .py

somit sollten auch die Bilder wieder gehen.
Man kann aber o.g. Fall Nutzen und einfach die Bilder in ein Anderes Verzeichnis ausserhalb des www-dirs legen und mit ../img/Bild.jpg ansprechen. Sollte tun.

Details zu AddHandler und SetHandler findet man hier:
http://www.modpython.org/
und grade Entdekt:
http://webpython.codepoint.net/ ein Web Python Tutorial

Gruss
JP

PS:
Ich suche noch nach den unterschiedlichen Einsätzen von mod_pythen und mod_python.publisher (Falls jemand schöne Beispiele von Anwendungen hat PN an mich)
Ein Vorteil wenn ich den normalen mod_python benutze ist, das ich seiten sequenziel laden kann und nicht den gesammten Output auf einmal sende.
(Interessant, wenn Datenbanken, SOAP oder LEIA Schnittstellen im hintergrund abgefragt werden und der Response etwas dauert.
wakko0815
User
Beiträge: 17
Registriert: Sonntag 20. Mai 2007, 17:47
Wohnort: Berlin
Kontaktdaten:

Hi gleez,

das gleiche Problem hatte ich auch schon.
http://www.python-forum.de/topic-10774.html

Also einfach das hier in die Apache-config ergänzen:

Code: Alles auswählen

<Files ~ "\.(gif|html|jpg|png)$">
             SetHandler default-handler
</Files> 
Dann kan der Apache auch wieder nicht-Python-Dateien, wenn für das
Verzeichnis der Python-Handler "gesetzt" ist.
Regelmässiges Versagen ist auch eine Form von Zuverlässigkeit
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

das was meine Vorredner gesagt haben plus folgendes:

du machst im link durch das ansprechen der Funktion einen "/"
daher musst du wenn du ein bild ansprichst diese per "../img/other.jpg"
wieder "entfernen" (wegen relativem Pfad.
Oder du musst mit absoluten Pfaden arbeiten (ist aber nicht zu empfehlen).
absolute wäre: "http://servername.tld/png/other.jpg"

Es tut mir leid das das so kompliziert geschrieben ist :-)
aber ich denke der Gedanke ist klar.
Antworten