Bottle

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. ⚓︎ Installation von Programmen

  2. ⚓︎ Ein Terminal öffnen

  3. ⚓︎ Einen Editor öffnen

Inhaltsverzeichnis
  1. Installation
    1. Paketquellen
    2. Manuelle Installation
  2. Nutzung
    1. Routing - ein einfaches Beispiel
    2. Simple Template
    3. Anbindung an andere Server
    4. Weitere Funktionen
  3. Alternativen
  4. Links

bottle.png 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:

Installation

Paketquellen

Bottle ist in den Paketquellen enthalten[1]:

Befehl zum Installieren der Pakete:

sudo apt-get install python3-bottle 

Oder mit apturl installieren, Link: apt://python3-bottle

Allerdings ist diese Installationsmethode nicht zu empfehlen, da in den Paketquellen nicht die aktuelle Version enthalten ist.

Manuelle Installation

Der Python Paketmanager pip stellt häufig aktuellere Versionen von Programmen als in den Paketquellen bereit. Folgendermaßen lässt sich das Programm darüber installieren:

pip3 install bottle       # Programm wird nur für den aktuellen Nutzer installiert  

Hinweis!

Fremdsoftware kann das System gefährden.

Nutzung

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.

Routing - ein einfaches Beispiel

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
15
from bottle import Bottle, route, debug, run


app = Bottle()

@app.route('/statisch')
def statisch():
    return 'Ich bin eine statische Route.'

@app.route('/dynamisch/<name>')
def dynamisch(name):
    return f'Hallo {name}, wie geht es dir?'

if __name__ == '__main__':
    run(app, host='localhost', port=8080, debug=True)

Nun kann man seine Anwendung wie folgt im Terminal starten[2]:

python3 webanwendung.py 

Das Prinzip ist wie folgt: Zuerst wird mit app=Bottle() ein app-Objekt angelegt, welches den Einstiegspunkt für die Applikation darstellt. Mit Hilfe des @app.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(app) startet den eingebauten, einfachen WSGI-Server von Bottle und liefert das app-Objekt aus. Ohne weitere Parameter läuft dieser auf "localhost" und Port 8080, lässt sich aber auch leicht umkonfigurieren:

1
run(app, host='localhost', port=8080, debug=True)

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(app, reloader=True)

Damit wird das Programm bei Änderungen automatisch neu geladen, ohne das man den Server manuell stoppen und starten muss.

Simple Template

Im folgenden wird ein einfaches Beispiel für die in Bottle enthaltene Vorlagensprache "Simple Template" gezeigt.

Es gibt eine dynamische Route, die einen Integerwert erwartet. Dieser wird an die Funktion rechnen übergeben, diese übergibt die Zahl wiederum als Variable zahl an das Template rechnen.tpl.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from bottle import Bottle, route, debug, run, template


app = Bottle()

@app.route('/rechnen/<zahl:int>')
def rechnen(zahl):
    return template('rechnen.tpl',zahl=zahl)

if __name__ == '__main__':
    run(app, host='localhost', port=8080, debug=True, reloader=True)

Dies erwartet, dass es eine Vorlage rechnen.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>
<p>Die eingegebenen Zahl ist {{zahl}}</p>
% if zahl % 2 == 0:
<p>{{zahl}} ist eine gerade Zahl.</p>
%else:
<p>{{zahl}} ist eine ungerade Zahl.
%for i in (2,4,6):
    %vielfach = i*zahl
    <p>Das {{i}}-fache davon ist {{vielfach}}.</p>
    %end
%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 🇬🇧.

Anbindung an andere Server

Der eingebaute Server sollte nur zum Entwickeln genutzt werden, nicht für den produktiven Einsatz. Dazu sollte eine mit Bottle erstellte Webapplikation über einen WSGI-Applikationsservern wie z.B.Gunicorn ausgeliefert werden. Eine ausführliche Beschreibung findet man in der Anleitung 🇬🇧 zu Bottle im Internet.

Weitere Funktionen

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.

Alternativen