Python goes Web -> von py nach html - frage wie?

  • Hallo,

    ich habe auf meinem PI ein py script laufen welches mir Sensorwerte ausließt und ggf. per Mail schickt.

    Meine Frage nun: welche ist die einfachste Methode das auf eine Website zu packen, damit ich das per URL aufrufen kann. Mit einfach meine ich was ohne der DB oder so ... hab gerade keine Idee und würde mich über Input freuen.


    Das script ist zusammengeschuster und einfach, die website muss auch nix können, nur einen oder ein paar Werte darstellen.

  • ich bin auch nicht der experte per se. aber ich weiß folgendes:

    mit python kann man in dateien schreiben, diese also manipulieren und natürlich auch dateien erstellen. also warum nicht die werte in eine txt-datei, diese dann auslesen und in eine html-datei schreiben oder besser: die werte gleich in eine html packen - fertisch ...

    --- wer lesen kann, ist klar im Vorteil ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---


  • Eine Datei ist auch nichts anderes als eine Datenbank. Was du wohl eher meinst ist ein datenbankserver. Den musst du auch nicht nehmen, mit dem in Pyhton schon vorhandenen sqlite3 baust du sowas flux und ohne Überbau auf. Der klare Vorteil liegt in der Behandlung konkurrierender Zugriffe unter Vermeidung von datenmüll, weil ein Prozess gerade liest während der andere schreibt.

  • Hallo,


    Quote

    Meine Frage nun: welche ist die einfachste Methode das auf eine Website zu packen, damit ich das per URL aufrufen kann. Mit einfach meine ich was ohne der DB oder so ... hab gerade keine Idee und würde mich über Input freuen.Indem du ein Webframework wie Flask benutzt, den Sensorwert ausliest und dann von der Template-Engine des Webframeworks die HTML-Seite "on the fly" erstellen und ausliefern lässt. Klingt vielleicht kompliziert, ist es aber nicht. Das sind vielleicht ~15 Zeilen Code.

    Wenn du wirklich nur den Sensorwert sehen willst, kannst du dir das HTML auch klemmen und den Sensorwert als JSON liefern lassen. Das wird dann im Browser so wie z.B. {'mein Sensorwert': 15.6} angezeigt.


    Zum dem Thema findest du hier im Forum und im Web aber auch etliche Beiträge.


    Gruß, noisefloor

  • Hallo,


    Quote

    habe mir gerade das angesehen, muss mal vertiefen: https://webpy.org/

    Kannst du, würde ich an deiner Stelle aber nicht. Flask ist einfacher. Und Flask ist nun mal einer DER Standards bei den Webframework, der andere ist Django. Das brauchst du aber nicht. Dann kommen noch Tornado, Bottle und CherryPy und dann ist man schon im Nischenbereich.


    Gruß, noisefloor

  • Hallo,


    Linus : https://www.jetbrains.com/lp/python-developers-survey-2019/ , auf der Seite nach "Frameworks and Libraries" suchen. Keine Ahnung, wie repräsentativ die Umfrage ist, aber Sanic kommt da gar nicht vor ;)

    Erstaunlich finde ich da die Lücke zwischen Platz 1+2 und Platz 3ff.


    Und webpy kommt da auch gar nicht drin vor... Da wissen wir gar nicht, was mehr Nische ist - webpy oder Sanic *SCNR*


    Gruß, noisefloor

  • Hallo,


    Quote

    hab es gerade mit bottle probiert, funktioniert mit nem "1-zeiler"

    Kann nicht sein, du brauchst bei Bottle (genau so wie bei Flask) mindestens fünf Zeilen für eine lauffähige Applikation.


    Gruß, noisefloor

  • als kleines Update, ein kurzer 9-Zeiler, erweitert aus der Demo, offeriert das gewünschte Ergebnis:


    Edited once, last by botswanabub: siehe comment darunter ... ().

  • Naja, das berechnet die ja nur einmal. Das muss schon IN die Funktion.

  • Hallo Tell,

    ich habe deine Anleitung ausprobiert. Die funktioniert bei mir auf einem Pi Zero auf Anhieb :) Einen Verbesserungsvorschlag habe ich noch. Du könntest vor dem jeweiligen Quelltext noch die Dateinamen und Pfade konkreter ergänzen. Es steht zwar dahinter, dass "flask erwartet dieses File in ./templates", aber nicht dass die Datei "index.html" heißt. Der Name wird erst aus der flask-Applikation heraus deutlich. Auch der Dateiname der ausführbaren Anwendung "app.py" wird erst im Nachhinein beim Starten der Anwendung ersichtlich.


    Viele Grüße,

    Tigerbeere

  • Hallo,


    botswanabub : direkt angewöhnen, ein Instanz von Bottle namens `app` anzulegen. Das erzwingt Bottle zwar nicht (Flask schon), aber das `app` Objekt brauchst du, wenn du deine Applikation über einen WSGI-Server auslieferst. Und da bist du relativ schnell, wenn du deine App produktiv nutzen möchtest.


    Strings stückelt man nicht mit + zusammen, sondern mit der format-Methode oder f-Strings. Bei einer Webapplikation solltest du aber sowie so besser JSON zurückliefern, nicht einen platten Text.


    Gruß, noisefloor

  • noisefloor : danke für die Tips. Werde das im weiteren Verlauf berücksichtigen. Zunächst brauchte ich da was quick and dirty ... und python ist noch recht neu für mich.

    hatte auch schon überlegt, das ganze eventuell gleich in php zu schreiben. mal sehen, erstmal muss es nur laufen.