Guten Tag, ich bastel gerade an einem Python-Skript zur Steuerung meines Smarthomes. Als Front-End möchte ich eine Website im lokalen Netz ablegen, welches mit Bootstrap ein wenig hübsch gemacht werden soll. Was geschehen soll: Wie Website soll z.B. ein Button zum Lichteinschalten gedrückt werden, die Parameter gehen ans Skript und werden dort verarbeitet. Was ich gemacht habe: Auf der HTML-Seite habe ich ein Formular erstellt, welches via get-Request die Paramter ans CGI-Skript übergibt. Das Skript erkennt die Paramater auch korrekt und meine Leuchte beginnt zu strahlen :-D Fast perfekt, aber.... wenn ich den Request ausführe, bekomme ich den Aufruf im Browser angezeigt, in meinem Fall http://localhost/cgi-bin/test.py?Knopf=Blablub Das möchte ich allerdings nicht, ich möchte nur, dass bei Knopfdruck die Paramter übertragen werden und sonst nichts. Momentan hab ich im Formular das target auf _blank gesetzt, so dass ich zumindest nur ein neues TAB öffne, aber schön ist das nicht. Gibt es eine Art "SEND"-Befehl mit JS oder sonstwas, so dass ich mein Problem beheben kann? Vielen Dank für Eure Rückmeldung. Den Code habe ich mal weggelssen, da er, glaube ich, keinen Mehrwert für die Frage liefert. Vielen Dank.
Thorsten schrieb: > Gibt es eine Art "SEND"-Befehl mit JS oder sonstwas, so dass ich mein > Problem beheben kann? XMLHttpRequest Ansonsten gibt es auch noch Websockets.
Damit probiere ich es nochmal und melde mich dann, wenn es hoffentlich geklappt hat :-) Dankeschön.
Hallo Thorsten, Thorsten schrieb: > ich bastel gerade an einem Python-Skript zur Steuerung meines > Smarthomes. Als Front-End möchte ich eine Website im lokalen Netz > ablegen, welches mit Bootstrap ein wenig hübsch gemacht werden soll. > > Was geschehen soll: > Wie Website soll z.B. ein Button zum Lichteinschalten gedrückt werden, > die Parameter gehen ans Skript und werden dort verarbeitet. Keine Rückgabe? Kein Indikator auf der Seite, ob die Lampe nun schon leuchtet oder nicht? (Und wehe Du sagst jetzt "ja aber ich seh' doch, ob das Licht an ist"... ;-)) > Auf der HTML-Seite habe ich ein Formular erstellt, welches via > get-Request die Paramter ans CGI-Skript übergibt. Das Skript erkennt die > Paramater auch korrekt und meine Leuchte beginnt zu strahlen :-D > > Fast perfekt, aber.... wenn ich den Request ausführe, bekomme ich den > Aufruf im Browser angezeigt, in meinem Fall > > http://localhost/cgi-bin/test.py?Knopf=Blablub Im Prinzip gibt es da zwei Varianten: die klassische ist die Übertragung eines HTML-Formulars per GET- oder POST-Request, dabei gibt das CGI dann wieder eine komplette HTML-Seite zurück, die der Webbrowser dann lädt, rendert, und schließlich darstellt. Die moderne Variante hingegen verwendet Javascript, das beim Druck auf den Knopf die Daten Deines Formulars ausliest, sie als XML- oder JSON-Request über XMLHttpRequest an den Server überträgt, der sie verarbeitet und eine Antwort in XML oder JSON zurückgibt. Die wird dann clientseitig von Deinem Javascript entgegen genommen und verarbeitet, und das Ergebnis des Request (meistens) auf der Webseite angezeigt. Eine beliebte JS-Bibliothek dafür ist beispielsweise JQuery. Nebenbei -- ich weiß, das hattest Du nicht gefragt und willst es vielleicht auch gar nicht wissen -- frage ich mich, warum Du in der heutigen Zeit noch auf die antiquierte CGI-Schnittstelle setzt. Mit CGI ruft der Webserver für jeden Request ein Programm auf, in Deinem Fall also den Python-Interpreter mit Deinem Programm, übergibt ihm den Request über sys.stdin und nimmt die Response über sys.stdout entgegen, während weitere Ausgaben über sys.stderr üblicherweise direkt im ErrorLog des Webservers landen. Da gibt es heute für die meisten Programmiersprachen deutlich effizientere Lösungen, so auch für Python mit seinem Webserver Gateway Interface WSGI. Dabei läuft der Python-Interpreter mit Deinem Programm im Hintergrund mit, so daß der Interpreter nicht bei jedem Aufruf geladen und initialisiert und Dein Programm nicht bei jedem Aufruf geladen, interpretiert, in Bytecode überführt und gestartet werden muß. Es liegt auf der Hand, daß das deutlich effizienter und performanter ist als das alte Common Gateway Interface, je nach Hard- und Software habe ich schon Faktor 100 und mehr gesehen. Darüber hinaus hat Python zwar ein hervorragendes cgi-Modul, das Teil der Standardinstallation ist, aber verglichen mit modernen Frameworks ist das PITA: pain in the ass (sagt jemand, der seine ersten CGIs seinerzeit in C geschrieben hat). Für Python gibts heute eine Vielzahl von Webframeworks für jede gewünschte Anwendung: Fullstack-Frameworks mit Template-Engine, Datenbank-Abstraktion(en), Benutzer- und Sessionverwaltung, wie etwa Zope, Django, Pylons oder TurboGears, aber auch leichtgewichtige und einfache Webframeworks wie etwa Bottle oder mein heutiger Liebling Flask. Die sind im Kern nur Mapper von URLs auf Funktionen und haben eine leichtgewichtige Template-Engine dabei, lassen sich allerdings modular mit so ziemlich allem erweitern, was des Webentwicklers schwarzes Herzchen begehrt. ;-) Vorteil: die Webframeworks laufen als WSGI und damit wesentlich effizienter als mit CGI, und die betreffenden Frameworks erfordern viel weniger Arbeit, Boilerplate, Validierungs-Gehampel oder anderen Hantier.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.