Seite 24 von 30

Verfasst: Dienstag 4. Mai 2010, 12:10
von Leonidas
uKev hat geschrieben:Wie loggt man sich wieder aus ;)?
Geht bei den meisten Browser nicht so ohne weiteres.

Verfasst: Dienstag 4. Mai 2010, 12:17
von uKev
D.h. man müsste tricksen, z.B. mit einem erneuten 401?
Klingt nicht so schön.

Verfasst: Dienstag 4. Mai 2010, 13:09
von ms4py
uKev hat geschrieben:D.h. man müsste tricksen, z.B. mit einem erneuten 401?
Klingt nicht so schön.
HTTP-Auth ist eben nicht zum Ausloggen gedacht.

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 ;)

Re: Bottle: Micro Web Framework

Verfasst: Samstag 15. Mai 2010, 13:45
von webwurst
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 :/

Re: Bottle: Micro Web Framework

Verfasst: Dienstag 18. Mai 2010, 21:28
von plakna
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):

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)
Hat wer eine Idee? Danke vorab für eine Antwort.

lg, Niklas

Re: Bottle: Micro Web Framework

Verfasst: Dienstag 18. Mai 2010, 21:42
von Dauerbaustelle
`request.url` (in der aktuellen git-Version gesehn, bin mir nicht sicher, ob das schon released wurde.)

Re: Bottle: Micro Web Framework

Verfasst: Mittwoch 19. Mai 2010, 09:09
von Defnull
Wurde es noch nicht. Der Code, der dafür nötig ist, ist aber auch schon recht aufschlussreich:

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
Wie du siehst, es ist nicht ganz so einfach :)

Re: Bottle: Micro Web Framework

Verfasst: Mittwoch 30. Juni 2010, 22:58
von Defnull
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/

Re: Bottle: Micro Web Framework

Verfasst: Sonntag 11. Juli 2010, 18:36
von Jack Daniels
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

Code: Alles auswählen

@route('/static/:filename#.*#')
def static_file(filename):
    send_file(filename, root='/path/to/static/files/')
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.

Re: Bottle: Micro Web Framework

Verfasst: Sonntag 11. Juli 2010, 18:45
von nemomuk
Welchen Server verwendest du denn?

Re: Bottle: Micro Web Framework

Verfasst: Sonntag 11. Juli 2010, 21:24
von noisefloor
Hallo,

leg' die Datei mal in den Root-Pfad deiner WSGI-Applikation und gibt als root '' oder '/' und guck mal, was passiert.

Gruß, noisefloor

Re: Bottle: Micro Web Framework

Verfasst: Sonntag 11. Juli 2010, 23:07
von Defnull
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.

Re: Bottle: Micro Web Framework

Verfasst: Montag 12. Juli 2010, 16:46
von mitsuhiko
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).
Kannst du Bottle nicht so aendern, dass es keine relativen Pfade braucht?

Re: Bottle: Micro Web Framework

Verfasst: Montag 12. Juli 2010, 17:06
von Jack Daniels
Der Server ist nen Apache, dementsprechend mit mod_python.
leg' die Datei mal in den Root-Pfad deiner WSGI-Applikation und gibt als root '' oder '/' und guck mal, was passiert.
funktioniert leider auch nicht.

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 :roll: ) und da steht

Code: Alles auswählen

Target WSGI script not found or unable to stat: *Pfad zur Seite*/hp.wsgistatic
, 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...

Re: Bottle: Micro Web Framework

Verfasst: Montag 12. Juli 2010, 17:08
von Defnull
mitsuhiko hat geschrieben:
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).
Kannst du Bottle nicht so aendern, dass es keine relativen Pfade braucht?
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.

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().

Re: Bottle: Micro Web Framework

Verfasst: Montag 12. Juli 2010, 18:43
von mitsuhiko
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.
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.

Re: Bottle: Micro Web Framework

Verfasst: Montag 12. Juli 2010, 20:52
von Defnull
mitsuhiko hat geschrieben:
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.
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.
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.

"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.

Re: Bottle: Micro Web Framework

Verfasst: Montag 12. Juli 2010, 20:56
von Defnull
Jack Daniels hat geschrieben:Der Server ist nen Apache, dementsprechend mit mod_python.
mod_python ist tot. Du solltest dringend zu mod_wsgi wechseln.
Jack Daniels hat geschrieben:

Code: Alles auswählen

Target WSGI script not found or unable to stat: *Pfad zur Seite*/hp.wsgistatic
. Ich kann mir aber nicht erklären, wie er auf das Gebilde kommt...
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.

Re: Bottle: Micro Web Framework

Verfasst: Montag 12. Juli 2010, 21:17
von noisefloor
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

Re: Bottle: Micro Web Framework

Verfasst: Montag 12. Juli 2010, 21:35
von Defnull
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?