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
Bottle: Micro Web Framework
- noisefloor
- User
- Beiträge: 4178
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Jo, einfach ein view mit dem Dekorator @error(nummer) versehen. zB:noisefloor hat geschrieben:gibt es eigentlich eine Möglichkeit, in Bottle eine individuelle Fehlerseite für nicht exisiterende Routen zu machen?
Code: Alles auswählen
@error(404):
def not_found():
# blah
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Sollte eigentlich gehen:
(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...
Code: Alles auswählen
from google.appengine.ext.webapp import util
util.run_wsgi_app(bottle.default_app())
Bottle: Micro Web Framework + Development Blog
- noisefloor
- User
- Beiträge: 4178
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
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
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
- noisefloor
- User
- Beiträge: 4178
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
ok, wer lesen kann ist klar im Vorteil... Es heißt jetzt default_app()
Mit dem Adapter:
bekommt ich aber im Apache den Fehler:
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()
Gruß, noisefloor[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
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
bottle.default_app() leifert einen WSGI-Handler zurück. Also entweder
oder noch einfacher
Code: Alles auswählen
def application(environ, start_response):
return bottle.default_app()(environ, start_response)
Code: Alles auswählen
application = bottle.default_app()
Bottle: Micro Web Framework + Development Blog
- noisefloor
- User
- Beiträge: 4178
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
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:
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
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!'

Gruß, noisefloor
- noisefloor
- User
- Beiträge: 4178
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
welches ist jetzt eigentlich die höchste Version von Bottle, die noch mit Python 2.5 läuft?
Gruß, noisefloor
welches ist jetzt eigentlich die höchste Version von Bottle, die noch mit Python 2.5 läuft?
Gruß, noisefloor
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
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*
Die Dokumentation ist in diesem Punkt also falsch *korrigier*

Bottle: Micro Web Framework + Development Blog
- noisefloor
- User
- Beiträge: 4178
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
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
> 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
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
mfg
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
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 

Bottle: Micro Web Framework + Development Blog
mh ok, ist das OK wenn ich die Fragen ins Web und Netzwerkprogrmmierungs-uNterfprum schreibe, hier finde ichs ein bisschen unübersichtlich
mfg
mfg
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.
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Ich bin eigentlich recht aktiv in diesem Forum. Ich sollte es also bemerken, wenn die Überschrift interessant klingt 

Bottle: Micro Web Framework + Development Blog
http://www.python-forum.de/topic-19976.html <- hat eigentlich mehr mit wsgi zu tun
mfg
jo so dachte ich dasIch 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.
mfg
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
So, im Git sind ein paar neue Features 
Nummer 1) Default-Routen als alternative zu @error(404)
Nummer 2) Controller-Class Routing (ab Python2.6 auch mit decorator)
Nummer 3) Experimenteller Support für Vererbung bei mako Templates

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
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'
Bottle: Micro Web Framework + Development Blog
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
1) ich finde die Klammern beim Default (`default()`) nicht so schön, die sind imho unnötig
2) Was bringt das Controller-Class-Routing? ;-)
2) Was bringt das Controller-Class-Routing? ;-)