Ubuntu 16.04 Xenial Xerus
Ubuntu 14.04 Trusty Tahr
Ubuntu 12.04 Precise Pangolin
Bottle ist eine in und für Python geschriebene Bibliothek (Python-Modul) zum einfachen und schnellen Erstellen von WSGI-basierten (Web Server Gateway Interface) Webanwendungen. Einige Merkmale von Bottle sind:
besteht nur aus einer einzelnen Datei
hat keine Abhängigkeiten außer Python selber
läuft unter Python ab 2.5 und Python 3.x
Funktionen für das Routing - sowohl statisches als auch dynamisches Routing wird unterstützt
Funktionen zum Auslesen von HTML-Formulardaten und dem HTML Header
Funktionen zum Upload von Dateien
Funktionen zum Generieren und Lesen von Cookies
generieren eines HTML Reponse
eigene Vorlagen Sprache "Simple Template"
erweiterbar über Plugins (ab Version 0.9)
Bottle ist sowohl für Python 3 als auch für Python 3in den Paketquellen enthalten[1], wobei das Python3-Paket nicht für Ubuntu 12.04 verfügbar ist:
python3-bottle
mit apturl
Paketliste zum Kopieren:
sudo apt-get install python3-bottle
sudo aptitude install python3-bottle
bzw.
python-bottle
mit apturl
Paketliste zum Kopieren:
sudo apt-get install python-bottle
sudo aptitude install python-bottle
Allerdings ist diese Installationsmethode nicht zu empfehlen, da in den Paketquellen nicht die aktuelle Version enthalten ist.
Bottle bzw. dessen Funktionen und Methoden lassen sich in Python über den Aufruf von
1 2 3 | import bottle #bzw.: from bottle import ... |
in den Programmcode laden.
Das folgende Beispielprogramm zeigt kurz die Möglichkeiten von statischen und dynamischen Routen in Bottle. Dazu gibt man den Code einfach in einen Editor ein[3] und speichert diesen zum Beispiel als webanwendung.py ab.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/usr/bin/env python3 from bottle import route, debug, run @route('/statisch') def statisch(): return 'Ich bin eine statische Route' @route('/dynamisch/<name>') def dynamisch(name): return 'Hallo {0}, wie geht es dir?'.format(name) debug(True) run() |
Nun kann man seine Anwendung wie folgt im Terminal starten[2]:
python3 webanwendung.py
Das Prinzip ist also wie folgt: Mit Hilfe des @route()
Dekorators wird die angegebene Route an die folgende Funktion gebunden. Die Funktion wiederum kann beliebigen Python-Code enthalten, welcher letztendlich mit return
zurückgegeben bzw. vom Browser dargestellt wird.
debug(True)
aktiviert das Debugging und ist besonders bei der Entwicklung hilfreich, sollte bei der finalen Applikation aber wieder deaktiviert werden. run()
startet den eingebauten, einfachen WSGI-Server von Bottle. Ohne weitere Parameter läuft dieser auf "localhost" und Port 8080, lässt sich aber auch leicht umkonfigurieren:
1 | run(port=8081) |
Routen sind dabei letztendlich die URLs, welche man aufrufen kann. Im obigen Beispiel wären dies z.B. http://localhost:8080/statisch
und http://localhost:8080/dynamisch/Otto
.
Wenn man aktiv am Programm entwickelt, kann run()
auch mit dem Parameter reloader
aufgerufen werden, also:
1 | run(reloader=True) |
Damit wird das Programm bei Änderungen automatisch neu geladen, ohne das man den Server manuell stoppen und starten muss.
Im folgenden wird ein einfaches Beispiel für die in Bottle enthaltene Vorlagensprache "Simple Template" gezeigt.
Zuerst wird eine Route definiert:
1 2 3 4 5 6 7 8 9 10 | #!/usr/bin/env python3 from bottle import route, debug, run, template @route('/vorlage/<zahl>') def vorlage(zahl): return template('bsp.tpl',zahl=zahl) debug(True) run(reloader=True) |
Dies erwartet, dass es eine Vorlage bsp.tpl gibt, welche entweder im selben Ordner wie das Python-Programm oder im Unterordner ./views liegt. An die Vorlage wird aus der dynamischen Route der Wert für zahl
übergeben, welcher dann in der Vorlage ebenfalls unter der Variablen zahl
vorhanden ist.
Die Vorlagen-Datei sieht so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 | %#Eine einfache Vorlage mit Simple Template <h1>Vervielfachen</h1> %try: %wert = int(zahl) <p>Die eingegebenen Zahl ist {{wert}}</p> %for i in (2,4,6): %vielfach = i*wert <p>Das {{i}}-fache davon ist {{vielfach}}</p> %end %except ValueError: <p>{{zahl}} ist keine Zahl!</p> %end <p>Fertig!</p> |
Wie man sieht ist dies eine Mischung aus HTML und Python. Python-Zeilen werden mit dem Prozentzeichen %
eingeleitet und können grundsätzlich beliebigen, gültigen Python-Code enthalten. Will man Variablen in der Vorlage auch außerhalb der Python-Zeilen nutzen, so müssen diese in doppelte geschweifte Klammern {{ }}
eingeschlossen werden. Eine Besonderheit ist, dass - anders als in "reinem" Python - Schleifen u.ä. explizit mit %end
abgeschlossen werden müssen. Neben HTML kann das Template auch beliebigen anderen Code enthalten (z.B. JavaScript), solange der Webbrowser diesen darstellen kann.
Eine vollständige Übersicht über Simple Template findet man in der Dokumentation .
Bottle kann natürlich auch mit weiteren, "echten" Webservern genutzt werden (u.a. auch mit dem Apache via mod_wsgi sowie vielen anderen WSGI-fähigen Servern), nicht nur mit dem internen Server. Eine ausführliche Beschreibung findet man in der Anleitung zu Bottle im Internet.
Die hier aufgeführten Beispiele zeigen nur einen Teil der Funktionalität von Bottle. Eine komplette Übersicht und Anleitung findet man in der Dokumentation von Bottle.
Flask ist ein weiteres WSGI Microframework, im direkten Vergleich zu Bottle etwas größer und komplexer, bietet aber auch mehr Möglichkeiten.
API-Referenz zu Bottle
Beispielapplikation zu Bottle
Thread zu Bottle im deutschen Python-Forum
weitere Webapplikationen Übersichtsseite
Diese Revision wurde am 8. Februar 2017 17:19 von Germrolf erstellt.