Seite 6 von 30
Verfasst: Freitag 31. Juli 2009, 16:38
von noisefloor
Hallo,
gibt es eigentlich eine Möglichkeit, in Bottle eine individuelle Fehlerseite für nicht exisiterende Routen zu machen?
Wenn z.B. die Routen '/' , '/spam' und '/egg' exisitieren und jemand '/foo' aufruft z.B. zu sagen: "Sorry, die Seite gibt es nicht"?
Hatte mal in Schnelldurchgang '/:#.*#' Als Route probiert, geht aber wohl nicht.
Gruß, noisefloor
Verfasst: Freitag 31. Juli 2009, 16:41
von Dauerbaustelle
noisefloor hat geschrieben:gibt es eigentlich eine Möglichkeit, in Bottle eine individuelle Fehlerseite für nicht exisiterende Routen zu machen?
Jo, einfach ein view mit dem Dekorator @error(nummer) versehen. zB:
Verfasst: Samstag 1. August 2009, 13:59
von KingZero
Mal eine Frage. Lässt sich bottle auch auf Google Apps Engine einsetzen?
Verfasst: Samstag 1. August 2009, 14:58
von Defnull
Sollte eigentlich gehen:
Code: Alles auswählen
from google.appengine.ext.webapp import util
util.run_wsgi_app(bottle.default_app())
(Edit) ich bastel grad an einer Unterstützung für Multipart in Python3. Leider ist der wsgi Standard unter 3.x etwas kaputt. Zum Beispiel kommt cgi.FieldStorage und urllib.parse_qs nicht mit bytes klar und wsgi.input unterstützt keinen size-Parameter bei readline. Wenn ich Pech habe, muss ich die Multipart-Unterstützung selbst entwickeln (wie es z.B. werkzeug tut). Die 1000 Zeilen wird das wohl sprengen...
Verfasst: Sonntag 2. August 2009, 11:42
von noisefloor
Hallo,
wie binde ich denn Bottle 0.5.6 an mod_wsgi?
Mit 0.4.14 funktionierte es ja wie auf Seite 3 beschrieben, bei 0.5.x gibt es ja scheinbar nicht mehr den WSGIHandler...?
Gruß, noisefloor
Verfasst: Sonntag 2. August 2009, 12:03
von noisefloor
Hallo,
ok, wer lesen kann ist klar im Vorteil... Es heißt jetzt default_app()
Mit dem Adapter:
Code: Alles auswählen
import sys
sys.path = ['/home/jochen/mr/'] + sys.path
from mr import default_app
def application(environ, start_response):
return default_app()
bekommt ich aber im Apache den Fehler:
[Sun Aug 02 12:58:24 2009] [error] [client 127.0.0.1] mod_wsgi (pid=8037): Exception occurred processing WSGI script '/home/jochen/mr/adapter.wsgi'.
[Sun Aug 02 12:58:24 2009] [error] [client 127.0.0.1] TypeError: 'Bottle' object is not iterable
Gruß, noisefloor
Verfasst: Sonntag 2. August 2009, 13:03
von Defnull
bottle.default_app() leifert einen WSGI-Handler zurück. Also entweder
Code: Alles auswählen
def application(environ, start_response):
return bottle.default_app()(environ, start_response)
oder noch einfacher
Verfasst: Sonntag 2. August 2009, 20:57
von noisefloor
Hallo,
yo, so funktioniert's. Danke.
Noch ein Nachtrag zum Fehler fangen: Der Code von Dauerbaustelle hat einen kleine Fehler, zumindest unter 0.5.x.
So funktioniert es:
Code: Alles auswählen
@error(404)
def fehler(code):
return 'Die gewählte Seite existiert nicht!'
Man
muss der Funktion ein Argument mitgeben (ob man es braucht oder nicht) - sonst gibt's eine Fehlermeldung a la "0 arguments expected, 1 given" - Bug oder Feature?
Gruß, noisefloor
Verfasst: Montag 17. August 2009, 08:40
von noisefloor
Hallo,
welches ist jetzt eigentlich die höchste Version von Bottle, die noch mit Python 2.5 läuft?
Gruß, noisefloor
Verfasst: Montag 17. August 2009, 09:07
von Defnull
Bottle ist seit 0.5.5
wieder Python2.5 kompatibel. Die aktuelle Version läuft und wird getestet unter 2.5, 2.6, 2.7, 3.0, 3.1 wobei alle 3.x Versionen Probleme mit File Uploads haben, da cgi.FieldStorage unter 3.x kaputt ist.
Die
Dokumentation ist in diesem Punkt also falsch *korrigier*

Verfasst: Montag 17. August 2009, 11:06
von noisefloor
Hallo,
> Die Dokumentation ist in diesem Punkt also falsch
Genau das hatte mich irritiert.
Da ich Bottle auf Ubuntu Hardy 8.04 laufen habe kam es genau auf Python 2.5. Um 3.x kümmere ich mich, wenn der Support für Hardy in 3.75 Jahren ausläuft
Danke für die schnelle Antwort.
Gruß, noisefloor
Verfasst: Mittwoch 19. August 2009, 11:46
von Dav1d
gibt es für bottle so ne art IRC-Channel, da ich meine Seite gerne mit bottle erstellen würde statt wie bisher mit PHP (Joomla), dafür brauch ich hilfe -.-, hier posten finde ich umständlich
mfg
Verfasst: Mittwoch 19. August 2009, 14:49
von Defnull
Da ich nebenbei Arbeite, habe ich leider keine Zeit ständig im IRC zu sein. Die Dokumentation ist allerdings recht vollständig (siehe Signatur) und für Detailfragen ist dieses Forum hervorragend geeignet

Verfasst: Mittwoch 19. August 2009, 15:59
von Dav1d
mh ok, ist das OK wenn ich die Fragen ins Web und Netzwerkprogrmmierungs-uNterfprum schreibe, hier finde ichs ein bisschen unübersichtlich
mfg
Verfasst: Mittwoch 19. August 2009, 21:57
von snafu
@Dav1d: Ich glaube, da wird keiner was gegen haben. ^^
Verfasst: Mittwoch 19. August 2009, 22:02
von lunar
Ich glaube, Dav1d wollte eher wissen, ob defnull Bottle-spezifische Detailfragen auch dann bemerkt, wenn sie nicht in diesem Thread, sondern im allgemeinen Webprogrammierungs-Forum gestellt werden. Schließlich hat dieses Forum keine Mail-Benachrichtigung für neue Beiträge, sondern nur für Antworten in existierenden Threads.
Verfasst: Mittwoch 19. August 2009, 23:40
von Defnull
Ich bin eigentlich recht aktiv in diesem Forum. Ich sollte es also bemerken, wenn die Überschrift interessant klingt

Verfasst: Donnerstag 20. August 2009, 10:29
von Dav1d
http://www.python-forum.de/topic-19976.html <- hat eigentlich mehr mit wsgi zu tun
Ich glaube, Dav1d wollte eher wissen, ob defnull Bottle-spezifische Detailfragen auch dann bemerkt, wenn sie nicht in diesem Thread, sondern im allgemeinen Webprogrammierungs-Forum gestellt werden. Schließlich hat dieses Forum keine Mail-Benachrichtigung für neue Beiträge, sondern nur für Antworten in existierenden Threads.
jo so dachte ich das
mfg
Verfasst: Freitag 21. August 2009, 01:18
von Defnull
So, im
Git sind ein paar neue Features
Nummer 1) Default-Routen als alternative zu @error(404)
Code: Alles auswählen
from bottle import route, default, request
@route('/test')
def test():
return 'test'
@default()
def catchall():
return "You visited %s" % request.path
Nummer 2) Controller-Class Routing (ab Python2.6 auch mit decorator)
Code: Alles auswählen
from bottle import route, BaseController
@route('/my/{action}')
@route('/special/url/:test', action='special')
class MyController(BaseController):
def test(self):
return 'This is the test action'
def special(self, test):
return 'This action is special'
def _invisible(self):
return 'This action is invisible'
Nummer 3) Experimenteller Support für Vererbung bei mako Templates
Verfasst: Freitag 21. August 2009, 11:59
von Dauerbaustelle
1) ich finde die Klammern beim Default (`default()`) nicht so schön, die sind imho unnötig
2) Was bringt das Controller-Class-Routing? ;-)