Seite 1 von 1

modpython - publisherhandler - addhandler/sethandler?

Verfasst: Donnerstag 18. Mai 2006, 19:29
von gleez
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

Verfasst: Donnerstag 18. Mai 2006, 19:41
von Leonidas
Was zeigt er denn bei http://localhost/img/index.jpg an?

Verfasst: Freitag 19. Mai 2006, 10:04
von gleez
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.

Verfasst: Freitag 19. Mai 2006, 19:12
von Leonidas
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.

Verfasst: Samstag 20. Mai 2006, 16:13
von gleez
Was sollte man denn benutzen?

Verfasst: Samstag 20. Mai 2006, 18:09
von Leonidas
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].

Verfasst: Sonntag 21. Mai 2006, 10:57
von gleez
Besten Dank. Ich seh mich mal um.

Verfasst: Donnerstag 21. Juni 2007, 15:13
von Jay-Pi
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.

Verfasst: Freitag 22. Juni 2007, 09:25
von wakko0815
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.

Verfasst: Freitag 22. Juni 2007, 14:52
von Sr4l
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.