python-webserver

Webserver mit Python auf einem Raspberry Pi erstellen

Normalerweise wird ein Webserver mit Nginx oder Apache realisiert. Dazu kommt dann noch PHP und eine SQL Datenbank. Mit PHP lassen sich dann zwar auch Python Scripte ausführen, allerdings ist das mühsam und oft auch mit viel Frust verbunden, da die Benutzerrechte von Linux einem immer wieder Steine in den Weg legen. Neben dem klassischen Weg existiert aber auch noch eine andere Lösung. Statt über drei Ecken erstellen wir gleich direkt mit Python eine Weboberfläche. In der nächsten Anleitung wollen wir die Kasa Steckdosen über eine Website mit Python steuern. Dafür ist es sinnvoll, einen Webserver gleich mit Python zu realisieren.

In dieser Anleitung wollen wir die Basics klären und ein einfaches Skript erstellen, das uns eine Variable aus der URL in unsere Webseite überträgt.

In dieser Anleitung werde ich nicht darauf eingehen, wie Raspberry Pi OS installiert wird. Ich arbeite mit einem Windows 10 PC und einem Raspberry Pi 3 auf dem Raspberry Pi OS Lite läuft.

Wir benötigen:

  • Raspberry Pi egal welches Modell
  • Texteditor wie Notepad++
  • Putty mit SSH zugrifft auf den Pi
  • FTP Client wie Filezilla und FTP Server auf dem Pi

01. Bibliotheken

Für unseren Webserver benötigen wir die kostenlose Python Bibliothek “flask”, die wir mit “pip3” installieren. Das gesamte Projekt wurde in Python 3 programmiert, das ist für unseren Raspberry kein Problem, wir müssen es ihm nur sagen. Damit wir mit “pip3” arbeiten können, müssen wir es zuerst einrichten, das machen wir mit diesem Befehl:

sudo apt install python3-pip

Die Bibliothek “flask” laden wir mit folgendem Befehl:

pip3 install flask

02. Ordnerstruktur

Als erstes benötigt unser Webserver eine passende Ordnerstruktur. Dabei sind zwei Ordner besonders wichtig. Im Verzeichnis “templates” werden sämtliche HTML-Dokumente gespeichert und im Ordner “static” landen alle CSS und JS Dateien. Das Verzeichnis legen wir wie folgt an:

mkdir webapp
cd webapp
mkdir static
mkdir templates

Ergebnis:

-/webapp
  --/static
  --/templates

03. Python Webserver mit flask

Nachdem unsere Struktur steht, legen wir endlich mit dem Programmieren los. Im Ordner “webapp” erstellen wir eine neue Datei namens “webapp.py”. Von hieraus starten und steuern wir unseren Webserver.

3.1 Python

Zum ersten Testen fügen wir folgenden Code in die Datei “webapp.py” ein:

from flask import Flask, render_template

app = Flask(__name__)

 
@app.route('/hallo/<vorname>')
def hallo(vorname):

     willkommen = {
         'vorname' : vorname,
         'nachname': 'Huber'
         }
         
     return render_template('test.html', **willkommen)
    
    
if __name__ == '__main__':
    app.run(debug=True, port=5000, host='0.0.0.0')

Damit legen wir den Grundstein für unser Projekt und haben zugleich einen Testcode zum Ausprobieren. In den ersten beiden Zeilen richten wir unsere “Flask App” ein, danach wird schon die erste Website angelegt.

Mit dem Befehl “@app.route” legen wir fest, unter welcher Adresse die Website zu finden ist. Mit der Variable “vorname” können wir einen Wert aus der URL in unser Dokument laden.

Wir definieren eine neue Funktion und geben ihr den Namen “hallo”, anschließend fügen die Variable “vorname” noch hinzu.

Wir erstellen eine JSON Variable und nennen diese “willkommen”. Anschließend packen wir den Wert von “vorname” und “nachname” in die JSON Variable.

Mit “return” laden wir das Modul “render_template” und bestimmen, welches HTML-Dokument verwendet werden soll. Damit haben wir eine direkte Verknüpfung zwischen URL und HTML Dokument erstellt. Mit “**willkommen” weisen wir die JSON Variable der HTML Datei zu.

Zum Schluss legen wir fest, wo unsere “Webserver App” im Netzwerk zu finden ist. Als Host stellen wir “0.0.0.0” ein, damit alle Geräte im Netzwerk auch auf die Website zugreifen können. Unter “port” stellen wir “5000” ein, damit der Port 80 der vom Apache-Webserver verwendet wird, nicht belegt wird. Soll nur der Python Webserver auf dem Raspberry Pi laufen, so kann auch Port 80 eingestellt werden, dann entfällt auch die Port-Bezeichnung in der URL.

3.2 HTML

Wer A sagt, muss auch B sagen. Wir haben schon in der Python-Datei ein HTML Dokument benannt, das müssen wir natürlich auch noch anlegen. Im Ordner “templates” erstellen wir eine neue Datei und nennen diese “test.html”. Anschließend packen wir folgenden Code in das Dokument:

<!DOCTYPE html>
   <head>
      <title>Test</title>
   </head>
   <body>
      <h1>Hallo {{ vorname }} {{ nachname }}</h1>
      <h2>Dein Vorname wurde aus der Adresszeile</h2>
	  <h2>in das HTML Dokument geladen. </h2>
	  <hr style="margin: 10px 0px 10px 0;">
      <h2>Dein Nachname wurde aus dem</h2>
	  <h2>Python Dokument geladen. </h2>	  
   </body>
</html>

3.3 Wir starten unseren Webserver

Nachdem jetzt alle Vorbereitungen abgeschlossen sind, lassen wir die Schlange aus dem Sack und starten unseren Python Webserver. Dafür geben wir folgenden Befehl in unser Terminal ein:

python3 /home/pi/webapp/webapp.py

Anschließend rufen wir die IP-Adresse unseres Raspberry Pi im Browser auf. Natürlich mit Port-Bezeichnung und dem Pfad, den wir im Python Dokument vergeben haben.

http://xxx.xxx.xxx.xx:5000/hallo/Andreas

Wenn alles geklappt hat, sollte es so mit eurem Namen aussehen:

zip-file-icon

artsblog-basic-webapp-master.zip

Filesize: 0,1 mb
Related Posts