Bottle: Micro Web Framework

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Benutzeravatar
noisefloor
User
Beiträge: 4178
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

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:

Code: Alles auswählen

@error(404):
def not_found():
    # blah
KingZero
User
Beiträge: 5
Registriert: Samstag 17. Januar 2009, 15:27

Mal eine Frage. Lässt sich bottle auch auf Google Apps Engine einsetzen?
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

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...
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
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
Benutzeravatar
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:

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
Benutzeravatar
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

Code: Alles auswählen

def application(environ, start_response):
    return bottle.default_app()(environ, start_response)
oder noch einfacher

Code: Alles auswählen

application = bottle.default_app()
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
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:

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
Benutzeravatar
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
Benutzeravatar
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* :oops:
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
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
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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
Benutzeravatar
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
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

mh ok, ist das OK wenn ich die Fragen ins Web und Netzwerkprogrmmierungs-uNterfprum schreibe, hier finde ichs ein bisschen unübersichtlich


mfg
Benutzeravatar
snafu
User
Beiträge: 6850
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@Dav1d: Ich glaube, da wird keiner was gegen haben. ^^
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.
Benutzeravatar
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
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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

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
Bottle: Micro Web Framework + Development Blog
Dauerbaustelle
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? ;-)
Antworten