Cookies und Colubrid

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

Mittwoch 15. Februar 2006, 11:45

Kann mir jemand hier oder im wiki ein Beispiel geben wie ich bei Colubrid mit Cookies arbeiten kann ?
Ich bin Anfänger und durch dieses Forum im Zusammenhang mit Python und Webprogrammierung auf colubrid gestoßen, ich probiere schon seit einer weile damit rum habe aber keinen Erfolg.

Danke im Voraus
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 15. Februar 2006, 11:52

Das ist eine gute Frage, die ich mir auch demächst mal stellen muß, bis dahin kann ich dir allerdings nicht weiter helfen :(

Schau dir mal die Sourcen an:
http://wsgiarea.pocoo.org/trac/browser/ ... ls.py#L235
http://wsgiarea.pocoo.org/trac/browser/ ... st.py#L202

IMHO ist self.request.COOKIE ein Art Dict...

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

Mittwoch 15. Februar 2006, 17:24

jens hat geschrieben:IMHO ist self.request.COOKIE ein Art Dict...
Aber nur eine Art. Es ist ein Cookie Objekt. Beschrieben ist es hier: http://docs.python.org/lib/module-Cookie.html

Es ist aber leicht Verändert und merkt sich automatisch die Änderungen und passt die Header an. Also braucht man kein setcookie wie in PHP.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 15. Februar 2006, 18:20

Das schreit mal wieder nach einem neuen Beispiel unter [wiki]Colubrid[/wiki]
:lol:

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
beyama
User
Beiträge: 14
Registriert: Mittwoch 15. Februar 2006, 11:37
Wohnort: Erfurt

Donnerstag 16. Februar 2006, 11:07

Gut, also ist self.request.COOKIES ein Cookie-Objekt abgeleitet von dem Cookiemodul aus Python.
Wenn ich jetzt so was mache wie self.request.COOKIES['id'] = '12345' dann erscheint im Header an den Client auch ein "Set-Cookie:id=12345;",
wie aber bekomme ich denn den Cookie "ausgelesen" ?
Ein self.request.COOKIES.load(os.environ['HTTP_COOKIE']) fällt doch flach oder übersehe ich hier was ?
Mal eine ganz andere Frage wegen der Mühen zum umstieg auf wsgi, ist es zu erwarten das z.B. mod_python irgendwann wsgi unterstützt oder
muss man davon ausgehen das es bezogen auf Apache nur als cgi bzw. fastcgi laufen wird ?
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 16. Februar 2006, 11:47

beyama hat geschrieben:wie aber bekomme ich denn den Cookie "ausgelesen" ?
Ich hab mich noch nicht damit beschäftigt, aber was spuckt ein self.request.echo(self.request.COOKIES) aus?
Ich schätze du kannst wie auf ein dict auf die cookies zugreifen...

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

Donnerstag 16. Februar 2006, 12:24

Code: Alles auswählen

self.request.COOKIES['mein_cookie'].value
:wink:
TUFKAB – the user formerly known as blackbird
beyama
User
Beiträge: 14
Registriert: Mittwoch 15. Februar 2006, 11:37
Wohnort: Erfurt

Donnerstag 16. Februar 2006, 12:33

Ich weiß nicht genau was es mit dem echo auf sich hat, aber ich vermute das es etwas ausgibt.
Mein Problem ist aber nicht wie ich an Daten ran komme die ich in das Cookieobjekt gesteckt habe bzw. wie ich sie an den Client sende (die Header werden ja automatisch angepasst), mein Problem ist wie ich die Cookiedaten vom Client wieder zurück bekomme.
Was ja bei der Standard Cookie-Klasse mit der Methode read() passiert.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 16. Februar 2006, 13:31

(haben sich die Postings überschnitten?)

self.request.echo(txt) ist quasi das selbe wie self.request.write(str(txt)) :)

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

Donnerstag 16. Februar 2006, 13:39

jens hat geschrieben:self.request.echo(txt) ist quasi das selbe wie self.request.write(str(txt)) :)
Nicht ganz. Eher das hier:

Code: Alles auswählen

    def echo(self, *args):
        if not args:
            raise ArgumentError, 'no data given'
        for arg in args:
            self.write(str(arg))
:wink:
TUFKAB – the user formerly known as blackbird
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 16. Februar 2006, 13:58

Ah! Cool, das wußte ich noch nicht... sehr praktisch!

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
beyama
User
Beiträge: 14
Registriert: Mittwoch 15. Februar 2006, 11:37
Wohnort: Erfurt

Donnerstag 16. Februar 2006, 14:31

Ja Postings haben sich überschnitten. Ich kann zu meiner Schande
an der Stelle nicht mitreden, da ich nicht weiß was dieses *args
bedeutet (ich denke da immer an Zeiger), aber wie gesagt ich bin Python
Anfänger und meine Motivation die Sprache zu lernen liegt momentan
Primär in der Webprogrammierung ansonsten bin ich eher an Embeddedsachen
interessiert, aber egal.

Ich habe gerade einfach das Problem das ich nicht weiß wie ich die
Cookie-Daten vom Client wieder zurück bekomme.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Donnerstag 16. Februar 2006, 15:05

Du willst also Daten zum Webbrowser des Users schicken?
Schau dir mal dieses Beispiel an:

Code: Alles auswählen

from colubrid import BaseApplication, execute
from time import time

class Application(BaseApplication):

    def process_request(self):
        if 'zeit' in self.request.COOKIES:
            t = self.request.COOKIES['zeit'].value
            self.request.write('Dein Letzter Besuch war um %s.' % t)
        else:
            self.request.COOKIES['zeit'] = time()
            self.request.write('Das ist dein Erster Besuch.')

app = Application

if __name__ == '__main__':
    execute()
self.request.write('string') schickt einfach Daten zum Client. (Falls du das meinst)
TUFKAB – the user formerly known as blackbird
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 16. Februar 2006, 15:14

Ab in's Wiki damit! :lol:

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
beyama
User
Beiträge: 14
Registriert: Mittwoch 15. Februar 2006, 11:37
Wohnort: Erfurt

Donnerstag 16. Februar 2006, 17:08

Ich meine schon das in deinem Code-Beispiel, aber das funktioniert (bei mir) nicht.
Ich habe es erst versucht, in das ein zu flechten was ich bis jetzt mit colubrid
gebaut hab, ging aber nicht, dann habe ich deine Variante ausprobiert und sie ging ebenfalls nicht.
Man kommt immer wieder bei "Das ist dein Erster Besuch." raus.
Wenn ich mir die http Header anschaue, dann sehe ich das Firefox
zwar das set-cookie... bekommt aber es nicht wieder zurück gibt.
Auch wenn ich dem Browser so einstelle das er mich vor dem annehmen
von Cookies fragt, reagiert er gar nicht auf den Cookie von Colubrid.
Ich kann mir das nicht erklären.
Antworten