Colubrid ObjectApplication und HTTP-Redirect

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
beyama
User
Beiträge: 14
Registriert: Mittwoch 15. Februar 2006, 11:37
Wohnort: Erfurt

Colubrid ObjectApplication und HTTP-Redirect

Beitragvon beyama » Samstag 18. Februar 2006, 16:42

Ich habe bei mir das hier ausprobiert:

Code: Alles auswählen

from colubrid import ObjectApplication

class Blog(object):
    def index(self):
        self.on_http_redirect(['http://www.foo.de/bar/'])
    def entry(self, id):
        pass
    def archive(self, year, month=False):
        pass
    archive.container = True

class Pictures(object):
    def index(self):
        pass
    def detail(self):
        pass

class Paste(object):
    def index(self, id=None):
        pass

class DisposeApplication(ObjectApplication):
    root = Blog
    root.pictures = Pictures
    root.paste = Paste
app = DisposeApplication

funktioniert aber nicht im Gegensatz zu BaseApplication wo selbiges problemlos geht.
Ich bekomme die Fehlermeldung: 'Blog' object has no attribute 'on_http_redirect',
was ich nicht verstehe, da es doch von BaseApplication abgeleitet ist(?).
Mache ich statt dessen so was:

Code: Alles auswählen

class Blog(object):
    def index(self):
        self.request.headers['Content-Type'] = 'text/html; charset=utf-8'
        self.request.headers['Location'] = 'http://www.foo.de/bar/'
        self.request.status = 302
    def entry(self, id):
        pass
    def archive(self, year, month=False):
        pass
    archive.container = True

geht es.

Stehe ich irgend wo auf dem Schlauch oder ist es ein fehler in Colubrid ?
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Re: Colubrid ObjectApplication und HTTP-Redirect

Beitragvon jens » Samstag 18. Februar 2006, 18:42

beyama hat geschrieben:

Code: Alles auswählen

class Blog(object):
    def index(self):
        self.on_http_redirect(['http://www.foo.de/bar/'])

Ich bekomme die Fehlermeldung: 'Blog' object has no attribute 'on_http_redirect',
was ich nicht verstehe, da es doch von BaseApplication abgeleitet ist(?).

Nein, du hast von object abgeleitet, was IMHO auch richtig ist, denn ich weiß nicht ob du an der Stelle von BaseApplication ableiten kannst, ich denke nicht, aber probiere es einfach aus...

Nur, was spricht dagegen wenn du es so machst:

Code: Alles auswählen

class Blog(object):
    def index(self):
        self.http_redirect('http://www.foo.de/bar/')
   
    def http_redirect(self, url):
        self.request.headers['Content-Type'] = 'text/html; charset=utf-8'
        self.request.headers['Location'] = url
        self.request.status = 302

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Samstag 18. Februar 2006, 23:17

Hehe. Du hast da was gemacht, was zwar funktioniert aber so nicht eingeplant ist ^^

Richtiger weg für einen Redirect ist das raisen einer HttpRedirect Exception:

Code: Alles auswählen

from colubrid import ObjectApplication
from colubrid.exceptions import HttpRedirect

class Blog(object):
    def index(self):
        raise HttpRedirect, 'http://www.foo.de/bar/'
    def entry(self, id):
        pass
    def archive(self, year, month=False):
        pass
    archive.container = True

class Pictures(object):
    def index(self):
        pass
    def detail(self):
        pass

class Paste(object):
    def index(self, id=None):
        pass

class DisposeApplication(ObjectApplication):
    root = Blog
    root.pictures = Pictures
    root.paste = Paste
app = DisposeApplication


Das on_http_redirect gehört nämlich wirklich nur zur DisposeApplication und wird aufgerufen, wenn du die oben genannte Exception wirfst.
TUFKAB – the user formerly known as blackbird
beyama
User
Beiträge: 14
Registriert: Mittwoch 15. Februar 2006, 11:37
Wohnort: Erfurt

Beitragvon beyama » Sonntag 19. Februar 2006, 13:49

Vielen Dank!

Und noch eine kurze Frage,
kommt man von der DisposeApplication Klasse an das request Objekt ?
Mir geht es darum z.B. Cookie oder url abfragen schon an dieser Stelle zu machen.
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Montag 20. Februar 2006, 09:32

beyama hat geschrieben:Vielen Dank!

Und noch eine kurze Frage,
kommt man von der DisposeApplication Klasse an das request Objekt ?
Mir geht es darum z.B. Cookie oder url abfragen schon an dieser Stelle zu machen.


Ja. Du musst nur die __init__ methode überladen:

Code: Alles auswählen

class DisposeApplication(ObjectApplication):
    root = None

    def __init__(self, environ, start_response):
        super(DisposeApplication, self).__init__(environ, start_response)
        self.request.headers["Content-Type"] = "text/plain"
TUFKAB – the user formerly known as blackbird

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder