Python in HTML einbetten

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
dirk1312
User
Beiträge: 19
Registriert: Dienstag 1. November 2016, 18:16

Hallo,

ich möchte eine 08/15-HTML-Oberfläche für meinen Raspberry Pi machen, die 10 Zeilen beinhaltet. Jede Zeile repräsentiert dabei den Status (HIGH / LOW) eines GPIO des Raspberry Pi.

Das Ding ist, dass ich bei jedem Aufruf der Oberfläche den aktuellen Status eines jeden Pins auslesen möchte / muss und somit die Seite dynamisch aufbauen muss. Ich würde mir also ein vordefiniertes assoziatives Array mit Pin als Key und einer Beschreibung als Wert anlegen und über alle Pins iterieren. Für jeden Pin würde ich eine Zeile ausgeben und den Status des GPIOs abfragen und ein "checked"-Flag im HTML setzen

Gibt es in Python denn die Möglichkeit, nicht jede Zeile HTML als print "" ausgeben zu müssen? Das ist halt schon viel Tippaufwand. In PHP kann man ja z.B. eine Seite komplett in HTML schreiben und dann an bestimmten Stellen z.B. <?php ?> einfügen. Das ist natürlich nicht schön und für größere Projekte auch keinesfalls zu empfehlen, aber für mein Projektchen will ich keine Template-Engine, o.ä. verwenden und das ganze unnötig aufblähen.

Vielen Dank und viele Grüße

Dirk
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

du kannst Python nicht in HTML einbetten, technisch nicht möglich. Python läuft serverseitig.

Webanwendung mit Python schreibt man seit ca. 10 Jahren mittels WSGI, dass kann Python über das wsgi-Modul auch ootb. Nacktes WSGI willst du nicht benutzen weil low-level, also nutzt man eines der vielen WSGI-Frameworks. Für so kleine Projekte wie deins passen Bottle oder Flask gut, zu beiden findest du bergeweise Doku im Netz.
Und normalerweise nimmt man für das WSGI-Framework serverseitig eine Template-Engine, um das HTML zu generien, weil das einfacher, flexibler und eleganter ist. Bottle und Flask habe beide jeweils eine Template-Engine an Bord. Bottle mit SimpleTemplate eine einfache, Flask mit Jinja2 eine der meistgenutzten und populärsten Template-Engines für Python.

Falls du irgendwo gelesen haben solltest, dass man das mit CGI macht: vergiß' es. Das ist seit > 10 Jahren out und mega-unständlich (zumindest im Vergleich zu WSGI).

Gruß, noisefloor
dirk1312
User
Beiträge: 19
Registriert: Dienstag 1. November 2016, 18:16

Hallo,

vielen Dank für deine ausführliche Antwort. Dann werde ich mir die beiden Frameworks anschauen. Zu Flask hatte ich schon vieles gefunden und auch schon etwas eingelesen, fand ich alles in allem aber etwas zu groß für mein Projekt (zumal ich die Steuerung irgendwann gerne in OpenHAB 2 einbinden möchte). Aber dann mache ich es lieber jetzt richtig, denn so wie ich mich kenne, wird es mit dem OpenHAB 2 eh ein sehr langfristiges Ziel :D
Ob ich Bottle oder Flask verwende mache ich davon dann abhängig, welches mir einfacher / verständlicher erscheint. Meine Zwecke sollten beide problemlos erfüllen können.

Die Info mit WSGI (k.A., was das genau ist, muss ich lesen) ist auf jeden Fall auch ein sehr guter Hinweis. Bzgl. Raspberry Pi, Python und Web-Anwendung habe ich "immer" gefunden, dass man CGI auf Apache so konfiguriert, dass es auch Python kann. Dann ändere ich das auch noch ab.

Vielen Dank und viele Grüße

Dirk
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
dass man CGI auf Apache so konfiguriert, dass es auch Python kann.
Das ist grundsätzlich auch richtig, aber seit ca. 10 Jahren veraltet.

WSGI ist _der_ Standard für Python Webanwenungen. 1. ist es einfacher, 2. ist es einfacher zu nutzen, 3. ist es vom Deployment wesentlich einfacher, zumal du dann keinen Apache Server brauchst. Apache kann zwar auch via mod_wsgi Python Webanwendungen ausliefern, aber gängige Praxis ist das nicht. Die meisten Frameworks haben einfache Webserver an Bord, ansonsten ist es gänger, einen WSGI-Applikationsserver wie gunicorn zu nutzen.

Gruß, noisefloor
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

@noisefloor: Aus Interesse: Mein Eindruck war bisher schon, dass mod_wsgi die übliche Wahl ist, wenn man Apache verwendet. Ist das inzwischen tatsächlich nicht mehr so? Ich hatte folgendes im Kopf:

Apache -> mod_wsgi
Gunicorn (/Uwsgi/Bjoern/…) -> Nur hinter Ngnix (oder ggf. anderem Reverse Proxy)
Eingebauter Server -> Nur für die Entwicklung

(Bei 2 und 3 kann sicher noch mal diskutieren, ob das im lokalen Netz auch gelten sollte.)

Was sicher stimmt, ist, dass die Verwendung von Apache selbst weniger empfohlen wird, meist zum Vorteil von Nginx + Application-Server.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das stimmt schon: wenn Apache, dann mit mod_wsgi. Nur, wie du schon sagst: empfohlen bzw. in vielen Tutorials wird heute eher gunicorn (oder uwsgi), ggf. mit nginx als Reverse-Proxy. Was ist persönlich auch einfacher zu konfigurieren finde also mod_wsgi.
Eingebauter Server -> Nur für die Entwicklung
Im Prinzip schon. Bzw. für "zu Hause" reicht der Dev-Server ggf. Wobei ich keine Erfahrung habe, wie stabil der Dev-Server von Flask ist. Der von Bottle geht so..

Gruß, noisefloor
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Alles klar, besten Dank :)
Antworten