Geht bei den meisten Browser nicht so ohne weiteres.uKev hat geschrieben:Wie loggt man sich wieder aus?
Bottle: Micro Web Framework
HTTP-Auth ist eben nicht zum Ausloggen gedacht.uKev hat geschrieben:D.h. man müsste tricksen, z.B. mit einem erneuten 401?
Klingt nicht so schön.
Wenn du einen 401 ohne den Header zurückgibst und gleichzeitig vom Inhalt her eine "normale" Seite zurückgibst, ist das IMHO gar nicht soo tricky

„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher
http://ms4py.org/
Gerhard Kocher
http://ms4py.org/
Du kannst auch tricksen indem du einen Redirect auf http://user:password@server.blub/bla
veranlasst. Dann wird auf jeden Fall der alte User verworfen.
Dann könntest bei diesem bestimmtem user:password wieder redirecten auf die seite ohne user:password davor
Danach sollte auch die zurück-Knöpfe im Browser nicht mehr zu dem ursprünglichen User mit Passwort zurückfinden..
Ist leider alles nen bisschen doof mit Http-Auth. Die Mozilla-Leute arbeiten an ner neuen Idee:
https://wiki.mozilla.org/Labs/Weave/Ide ... pec/Latest
Aber das muss dann ja auch erstmal jeder Browser unterstützen :/
veranlasst. Dann wird auf jeden Fall der alte User verworfen.
Dann könntest bei diesem bestimmtem user:password wieder redirecten auf die seite ohne user:password davor

Danach sollte auch die zurück-Knöpfe im Browser nicht mehr zu dem ursprünglichen User mit Passwort zurückfinden..
Ist leider alles nen bisschen doof mit Http-Auth. Die Mozilla-Leute arbeiten an ner neuen Idee:
https://wiki.mozilla.org/Labs/Weave/Ide ... pec/Latest
Aber das muss dann ja auch erstmal jeder Browser unterstützen :/
Hallo,
ich hab eine kleine Frage.
Kann man irgendwie herausfinden über domain der user kommt? Wenn ich irgendwie die gesamte Url auslesen könnte, dann wäre das schon super.
Sinngemäß möchte ich so etwas bauen (funktioniert natürlich nicht):
Hat wer eine Idee? Danke vorab für eine Antwort.
lg, Niklas
ich hab eine kleine Frage.
Kann man irgendwie herausfinden über domain der user kommt? Wenn ich irgendwie die gesamte Url auslesen könnte, dann wäre das schon super.
Sinngemäß möchte ich so etwas bauen (funktioniert natürlich nicht):
Code: Alles auswählen
from bottle import route, run
@route('http://blabla.de')
def hde():
return "hallo deutschland!"
@route('http://blabla.at')
def hat():
return "hallo oesterreich!"
run(port=8080, reloader=True)
lg, Niklas
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
`request.url` (in der aktuellen git-Version gesehn, bin mir nicht sicher, ob das schon released wurde.)
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Wurde es noch nicht. Der Code, der dafür nötig ist, ist aber auch schon recht aufschlussreich:
Wie du siehst, es ist nicht ganz so einfach 
Code: Alles auswählen
scheme = environ.get('wsgi.url_scheme', 'http')
host = environ.get('HTTP_X_FORWARDED_HOST', environ.get('HTTP_HOST', None))
if not host:
host = environ.get('SERVER_NAME')
port = environ.get('SERVER_PORT', '80')
if scheme + port not in ('https443', 'http80'):
host += ':' + port

Bottle: Micro Web Framework + Development Blog
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Der letzte Release Candidate für Bottle 0.8 ist draußen: http://github.com/defnull/bottle/tree/release-0.8
Bis auf letzte bugfixes und Dokumentation ist diese Version endgültig und wird bald auch offiziell (debian, ubuntu, pypi) veröffentlicht.
Im gleichen Zug habe ich auch die Dokumentation erweitert: http://bottle.paws.de/docs/
Bis auf letzte bugfixes und Dokumentation ist diese Version endgültig und wird bald auch offiziell (debian, ubuntu, pypi) veröffentlicht.
Im gleichen Zug habe ich auch die Dokumentation erweitert: http://bottle.paws.de/docs/
Bottle: Micro Web Framework + Development Blog
-
- User
- Beiträge: 30
- Registriert: Freitag 1. Januar 2010, 11:38
Ich habe Bottle per WSGI laufen (genau so, wie es im Tutorial erklärt wird) und es funktioniert auch einwandfrei, nur die statischen Dateien habe ich noch nicht zum laufen bekommen. Wenn ich eine statische Datei aufrufen will bekomme ich einen 404. Die Funktion sieht genau so aus wie die im ersten Post dieses Threads, also
Das einzige was mir einfallen würde wäre, dass ich 'root' falsch angegeben habe. Muss man in meinem Fall (WSGI) den Pfad relativ zur WSGI-Datei oder von / aus angeben? Beides habe ich eigentlich ausprobiert, aber ich weiß ja nicht.
Wäre cool, wenn du mir sagen könntest, an was das liegt.
Code: Alles auswählen
@route('/static/:filename#.*#')
def static_file(filename):
send_file(filename, root='/path/to/static/files/')
Wäre cool, wenn du mir sagen könntest, an was das liegt.
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
leg' die Datei mal in den Root-Pfad deiner WSGI-Applikation und gibt als root '' oder '/' und guck mal, was passiert.
Gruß, noisefloor
leg' die Datei mal in den Root-Pfad deiner WSGI-Applikation und gibt als root '' oder '/' und guck mal, was passiert.
Gruß, noisefloor
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Der root-pfad kann relativ, sollte aber absolut angegeben werden, da z.B. mod_wsgi nicht das Projekt-Verzeichnis als 'aktuelles' Verzeichnis annimmt, sondern das des init-Scripts, mit dem Apache gestartet wurde (oder so).
Es gibt übrigens einen Unterschied zwischen "404 Not Found: ..." und "404 File does not exist." Beim ersten wurde nicht einmal die route gefunden, beim zweiten war die Route richtig, die Datei aber nicht vorhanden.
Es gibt übrigens einen Unterschied zwischen "404 Not Found: ..." und "404 File does not exist." Beim ersten wurde nicht einmal die route gefunden, beim zweiten war die Route richtig, die Datei aber nicht vorhanden.
Bottle: Micro Web Framework + Development Blog
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Kannst du Bottle nicht so aendern, dass es keine relativen Pfade braucht?Defnull hat geschrieben:Der root-pfad kann relativ, sollte aber absolut angegeben werden, da z.B. mod_wsgi nicht das Projekt-Verzeichnis als 'aktuelles' Verzeichnis annimmt, sondern das des init-Scripts, mit dem Apache gestartet wurde (oder so).
TUFKAB – the user formerly known as blackbird
-
- User
- Beiträge: 30
- Registriert: Freitag 1. Januar 2010, 11:38
Der Server ist nen Apache, dementsprechend mit mod_python.
Der Fehler heißt "Not Found". Wusste ich gar nicht, dass es da zwei verscheidene gibt...
Aber ich bin grade auf die phänomenale Idee gekommen, in den Logs nachzuschauen (hätt ich früher drauf kommen können
) und da steht
, wobei meine WSGI-Datei 'hp.wsgi' heißt und 'static' der Ordner ist, in dem die statischen Dateien sein sollen (wie im Beispiel). Ich kann mir aber nicht erklären, wie er auf das Gebilde kommt...
funktioniert leider auch nicht.leg' die Datei mal in den Root-Pfad deiner WSGI-Applikation und gibt als root '' oder '/' und guck mal, was passiert.
Der Fehler heißt "Not Found". Wusste ich gar nicht, dass es da zwei verscheidene gibt...
Aber ich bin grade auf die phänomenale Idee gekommen, in den Logs nachzuschauen (hätt ich früher drauf kommen können

Code: Alles auswählen
Target WSGI script not found or unable to stat: *Pfad zur Seite*/hp.wsgistatic
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Ich wüsste nicht, wie das auf eine einfache und gleichzeitig saubere Art gehen sollte. Der __name__ Trick von Flask ist zwar nett, mit aber noch eine Spur zu magisch. Viele User dürften den Sinn nicht verstehen oder fehlinterpretieren. Spielereien mit dem call-stack sind ebenfalls möglich, aber schwer zu debuggen und nicht von jeder Python Implementierung abgedeckt.mitsuhiko hat geschrieben:Kannst du Bottle nicht so aendern, dass es keine relativen Pfade braucht?Defnull hat geschrieben:Der root-pfad kann relativ, sollte aber absolut angegeben werden, da z.B. mod_wsgi nicht das Projekt-Verzeichnis als 'aktuelles' Verzeichnis annimmt, sondern das des init-Scripts, mit dem Apache gestartet wurde (oder so).
Mir fällt höchstens eine abb-gebundene Konfiguration des Root-Pfades ein, so das alle relativen Pfade intern erst einmal mit dieser konfigurierten Root-Pfad gejoint werden. Sowas wie:
Code: Alles auswählen
app.set_root(__file__)
Ich kann das ja mal einbauen und sehen, wie es angenommen wird. Auf jeden fall wäre das besser als os.chdir().
Bottle: Micro Web Framework + Development Blog
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Das ist nicht magisch, das ist so wie jedes Python package funktioniert das Daten relativ zu seinem Speicherort laed. "os.path.join(os.path.dirname(__file__), '...')". Ist soweit ich weiss sogar dokumentiert in Python's docs.Defnull hat geschrieben:Ich wüsste nicht, wie das auf eine einfache und gleichzeitig saubere Art gehen sollte. Der __name__ Trick von Flask ist zwar nett, mit aber noch eine Spur zu magisch.
TUFKAB – the user formerly known as blackbird
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Mit "magisch" meine ich den __name__ Trick, nicht die Benutzung von __file__. Wenn ich es richtig verstanden habe, benutzt Flask den Inhalt von __name__ um anschließend im sys.modules dict nach dem Modul und seinem __file__ Attribut zu schauen. Flask gelangt so mit ein paar Umwegen an den Pfad zum Modul, in dem Flask instantiiert wird.mitsuhiko hat geschrieben:Das ist nicht magisch, das ist so wie jedes Python package funktioniert das Daten relativ zu seinem Speicherort laed. "os.path.join(os.path.dirname(__file__), '...')". Ist soweit ich weiss sogar dokumentiert in Python's docs.Defnull hat geschrieben:Ich wüsste nicht, wie das auf eine einfache und gleichzeitig saubere Art gehen sollte. Der __name__ Trick von Flask ist zwar nett, mit aber noch eine Spur zu magisch.
"Unmagischer" fände ich dagegen eine "app.set_root(__file__)" oder "app=Bottle(root=__file__)" Lösung. Dann weiß der Benutzer, was er tut und kann dieses Wissen auch ausnutzen, um Sonderfälle (z.B. komplett extern gespeicherte Ressourcen) zu lösen.
Eigentlich tritt das Problem nur mit mod_wsgi auf, da der Benutzer dort keine Kontrolle über das Arbeitsverzeichnis hat und es auch nicht ändern darf. Da mod_wsgi auch in anderen Punkten deutlich vom üblichen Deployment abweicht, hab ich dafür gerade einen neuen Server Adapter geschrieben. Nun kann man mod_wsgi genau so anbinden wie alle anderen Server auch. Die "Do not run run()" Sonderregel entfällt und das "application" Objekt im globalen Modul-Namensraum ist auch überflüssig. Der Pfad zum wsgi script wird automatisch ermittelt (ohne Benutzer-Angabe von __name__ oder __file__) und die Template-Pfade angepasst. Klappt soweit alles. Da hätte ich mal früher drauf kommen können.
Bottle: Micro Web Framework + Development Blog
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
mod_python ist tot. Du solltest dringend zu mod_wsgi wechseln.Jack Daniels hat geschrieben:Der Server ist nen Apache, dementsprechend mit mod_python.
Sieht nach einem Apache-Konfigurationsfehler aus. Wenn du es genau so machst, "wie es im Tutorial erklärt wird", kann es auch nicht klappen, da das Tutorial auf mod_wsgi aufbaut und auf mod_python gar nicht eingeht.Jack Daniels hat geschrieben:. Ich kann mir aber nicht erklären, wie er auf das Gebilde kommt...Code: Alles auswählen
Target WSGI script not found or unable to stat: *Pfad zur Seite*/hp.wsgistatic
Bottle: Micro Web Framework + Development Blog
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
wenn ich Bottle 0.8.RC1 von github benutze und "run(reloader=True)" setze läuft Bottle direkt in eine endlose Reload-Schleife...
Gruß, noisefloor
wenn ich Bottle 0.8.RC1 von github benutze und "run(reloader=True)" setze läuft Bottle direkt in eine endlose Reload-Schleife...
Gruß, noisefloor
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Mist, das hat sich wohl bei http://github.com/defnull/bottle/commit ... 3ba65b64f4 eingeschlichen. Danke fürs testen!
Hat jemand eine Idee, wie man für so was anständige unit-tests schriebt?
Hat jemand eine Idee, wie man für so was anständige unit-tests schriebt?
Bottle: Micro Web Framework + Development Blog