Wenn Sie interaktive Webseiten erstellen, dabei aber ausschließlich Python nutzen wollen, fahren Sie mit diesen Frameworks besser. Foto: Kurit afshen – shutterstock.com Python hat sich längst als Sprache für serverseitige Frameworks etabliert und unterstützt dabei Projekte jeder Größenordnung und sämtliche Use Cases. Allerdings ist Python bisher auch eher auf das Backend beschränkt – bislang gibt es noch keine wirkliche “Kultur”, Python für Frontend- und Client-seitigen Code zu nutzen. Das liegt auch daran, dass bisherige Versuche, Python am Frontend in JavaScript zu transpilieren oder über WebAssembly auszuführen, eher klobig und bisweilen primitiv umgesetzt wurden. Doch es gibt neue Hoffnung: Einige moderne Web Frameworks ermöglichen es, deklarativen Python-Code im Backend zu schreiben, der programmatisch Frontend-Code generiert. Sie können Python-Objekte verwenden, um HTML-Entitäten und deren JavaScript-gestütztes Verhalten zu beschreiben – und dann das Framework diese Objekte erstellen lassen, wenn sie dem Client übergeben werden. Die folgenden drei Web Frameworks für Python folgen exakt diesem Paradigma. Jedes von ihnen ermöglicht es, Frontend-Code (HTML, CSS und JavaScript) durch Backend-Python-Code zu erzeugen. Die Frontend-Objekte werden dabei durch das Python-Objektmodell dargestellt. 1. Anvil Die Macher des Web Frameworks Anvil versprechen, “Webanwendungen mit nichts anderem als Python zu erstellen”. Allerdings können Sie dabei auch auf Low-Code-Tools mit Drag-and-Drop-Funktion zurückgreifen. Am Ende steht eine vollwertige Webanwendung mit einem interaktiven, JavaScript-basierten Frontend und einem Python-basierten Backend. Anvil bietet dabei zwei grundlegende Ansätze: Der Cloud Service ist in verschiedenen Preisstufen erhältlich und bietet visuelle Build-Tools sowie eine Reihe von Hosting-Optionen. Die quelloffene Laufzeitumgebung von Anvil enthält kein Design-Tool, ermöglicht es aber, Anwendungen mit manuell geschriebenem Code zu erstellen und auszuführen. Anvil-Anwendungen bestehen grundsätzlich aus drei Komponenten: der Benutzeroberfläche (die sich manuell oder mit Low-Code-Tools erstellen lässt), dem clientseitigen Code (der von Python nach JavaScript transpiliert wird), sowie dem serverseitigen Python-Code. Der Anvil-Cloud-Editor generiert automatisch Backend- und Frontend-Code im Stil von Tools wie Qt Design Studio. Er enthält standardmäßig einige Beispiele – etwa eine einfache, statische Applikation ohne Backend-Code, ein simples Ticketing-System und einen vollständigen Onlineshop. Diese dienen potenziell als Template für Ihr eigenes Projekt. Die Cloud-Inkarnation von Anvil bietet ein mächtiges Visual-Design-Tool für UIs. Einmal generiert, können Sie den Code auch jenseits des Tools einsetzen.IDG Darüber hinaus bietet Anvil auch eine nützliche Auswahl an UI-Komponenten, die Sie in Ihre Webseiten einbinden können. Dazu gehört beispielsweise ein Timer, der dafür sorgt, dass Code in bestimmten Intervallen ausgeführt wird – etwa, um Datenquellen nach Aktualisierungen abzufragen. Bei Bedarf können Sie auch Ihr eigenes HTML und eigene Komponenten erstellen. Datenquellen lassen sich über die Cloud hinzufügen und mit Komponenten verdrahten, so dass gängige CRUD-Applikationen sehr flott entstehen. Wenn Sie sich dazu entscheiden, die Anvil Runtime zu nutzen, können Sie Anwendungen manuell schreiben und dabei einige Templates als Startpunkt nutzen. Code-Änderungen werden sofort auf den Anwendungsserver übertragen, was einen schnellen Entwicklungszyklus ermöglicht. Bei den Elementen der Benutzeroberfläche handelt es sich im Wesentlichen um Instanzen von Python-Klassen, deren Ereignis-Handler über Klassenmethoden hinzugefügt werden. Über gut durchdachte allgemeine Methoden lassen sich auch programmatische Verhaltensweisen hinzufügen. Wenn Sie beispielsweise einen Event bei den Children eines Objects auslösen möchten, brauchen Sie dafür keinen Loop. Stattdessen nutzen Sie einfach die raise_event_on_children-Methode für das Container-Objekt. Standardmäßig wird der gesamte JavaScript-Code für eine Anvil-Site automatisch generiert, Sie können bei Bedarf aber auch Ihren eigenen schreiben. In diesem Fall sollten Sie darauf achten, dass dieser nicht mit dem Anvil-Code in Konflikt gerät. Zudem sind einige der Anvil-eigenen Abhängigkeiten etwas veraltet, zum Beispiel Bootstrap 3. Dieses Problem können Sie umgehen, indem Sie ein benutzerdefiniertes Theme erstellen – was nicht leider nicht trivial ist. 2. Reflex Das Reflex-Framework (ehemals bekannt als Pynecone) kann nicht mit dem Design-Toolset von Anvil aufwarten, entspringt jedoch derselben Grundidee: Python-Code zu verwenden, um sowohl das Backend Ihres Web-Stacks zu coden, als auch das Frontend programmatisch zu generieren, ohne dabei auf JavaScript zurückgreifen zu müssen. Zu Pynecone-Zeiten verwendete das Framework selbst sowohl Python als auch die (Long-term Support-Version der) Node.js-Laufzeitumgebung in Kombination mit dem Bun JavaScript Library Manager. Reflex benötigt lediglich Python in Version 3.8 (oder höher) und funktioniert unter Linux und Windows. Benutzern des Microsoft-Betriebssystems wird für eine optimale Performance allerdings empfohlen, das Windows-Subsystem für Linux (WSL) zu nutzen. Um ein neues Reflex-Projekt aufzusetzen, nutzen Sie den reflex-Befehl. Ein Beispiel für eine Reflex-Webanwendung in Python. Der interaktive Chart unterstreicht die Widget-Vielfalt von Reflex.IDG Das Frontend einer Reflex-App kompiliert zu einer React-Anwendung, wobei FastAPI zum Einsatz kommt, um das Python-Backend zu bedienen. Viele gängige Komponenten sind bereits integriert – nicht nur so alltägliche Dinge wie Textlayouts oder Formularverarbeitung, sondern auch: Data Display Objects wie Diagramme, Feedback-Steuerelemente wie Alerts und Fortschrittsbalken sowie Overlay-Objekte wie Modals und Tooltips. Darüber hinaus lassen sich auch benutzerdefinierte React-Komponenten einbinden. Für die Anbindung an Datenquellen enthält Reflex einen Data Layer (SQLAlchemy ORM). Falls Sie eine UI-Komponente anpassen möchten, können die meisten gängigen Modifikationen (wie zum Beispiel CSS-Styling) als Argumente an den Object Constructor übergeben werden, anstatt eine Komponente per Subclassing zu ändern. Für alles andere gibt es benutzerdefiniertes HTML, aber eine Kombination aus den Built-Ins und ihren Optionen sollte für die große Mehrheit der gängigen Projekte ausreichen. Wenn Sie hauptsächlich statische Websites erstellen, bringt Reflex zudem eine praktische Funktion mit, mit der es sich auch als programmatisches Website-Generator-Tool empfiehlt – nämlich eine komplette Webseite in ein statisches Build zu exportieren. 3. NiceGUI Angenommen, Sie möchten einer existierenden Python-App, die über die Kommandozeile oder einen Web Service läuft, ein webbasiertes User Interface hinzufügen – und zwar möglichst schnell. Dann könnten Sie versuchen, ein Frontend in Eigenregie zusammenzuzimmern – oder sich den Aufwand sparen und einfach NiceGUI dafür verwenden. Dieses Python Web Framework nutzt deklarative Syntax, um zu beschreiben, wie UI-Komponenten aussehen und sich verhalten sollen. Das Spektrum an vorgefertigten Komponenten ist dabei breitgefächert und enthält beispielsweise: Buttons, Slider, Text-Label, Eingabefelder, und Datei-Uploader. Darüber hinaus stehen auch einige Optionen für anspruchsvollere Audio- oder Videoanwendungen zur Verfügung, beispielsweise, um Daten interaktiv zu präsentieren oder 3D-Viualisierungen auf die Beine zu stellen. Dabei erfordert keine Komponente auch nur eine einzige Zeile Browser-Code – NiceGUI übernimmt das vollständig für Sie. Eine simple NiceGUI-App mit programmatisch generierten Web Widgets. Die resultierede Applikation lässt sich als Standalone-Programm oder über einen Server bereitstellen.IDG Um vorhandenen Code mit NiceGUI zu wrappen, sollten Sie sich zuvor damit auseinandersetzen, wie NiceGUI beispielsweise mit Event Loops und Application State umgeht. Die gute Nachricht vorab: All das läuft über High-Level-Konstrukte innerhalb des NiceGUI-Frameworks selbst ab. Zum Beispiel: können Sie mit dem ui.timer-Objekt definieren, dass Code in bestimmten Intervallen ausgeführt wird; übernehmen ui.clipboard und app.storage die entsprechenden Prozesse; können langlaufende Tasks mit run.cpu_bound einfach an einen Subprozess delegiert werden – oder an einen Thread (run.io_bound). NiceGUI nutzt FastAPI als internes Web Framework – entsprechend folgen die Applikationen demselben Muster. Sie können darüber hinaus auch vorgefertigte Docker-Images als (containerisierte) Version einer NiceGUI-App nutzen. Oder Sie bündeln Ihre App als Standalone-Executable, um sie möglichst einfach zu verteilen. Welches Python Web Framework nutzen? Zusammenfassend lässt sich festhalten: Anvil besticht vor allem mit seinen Tools, um interaktive Benutzeroberflächen mit wenig bis gar keinem Code zu erstellen. Reflex empfiehlt sich, wenn Sie mit einem React-Frontened arbeiten und statische HTML-Seiten rendern möchten. NiceGUI bietet diverse deklarative Abstraktionen um schnell Anwendungen zu erstellen – inklusive Event Handling. (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox!
3 Python Web Frameworks für Vorzeige-Frontends
Wenn Sie interaktive Webseiten erstellen, dabei aber ausschließlich Python nutzen wollen, fahren Sie mit diesen Frameworks besser. Foto: Kurit afshen – shutterstock.com Python hat sich längst als Sprache für serverseitige Frameworks etabliert und unterstützt dabei Projekte jeder Größenordnung und sämtliche Use Cases. Allerdings ist Python bisher auch eher auf das Backend beschränkt – bislang gibt es noch keine wirkliche “Kultur”, Python für Frontend- und Client-seitigen Code zu nutzen. Das liegt auch daran, dass bisherige Versuche, Python am Frontend in JavaScript zu transpilieren oder über WebAssembly auszuführen, eher klobig und bisweilen primitiv umgesetzt wurden. Doch es gibt neue Hoffnung: Einige moderne Web Frameworks ermöglichen es, deklarativen Python-Code im Backend zu schreiben, der programmatisch Frontend-Code generiert. Sie können Python-Objekte verwenden, um HTML-Entitäten und deren JavaScript-gestütztes Verhalten zu beschreiben – und dann das Framework diese Objekte erstellen lassen, wenn sie dem Client übergeben werden. Die folgenden drei Web Frameworks für Python folgen exakt diesem Paradigma. Jedes von ihnen ermöglicht es, Frontend-Code (HTML, CSS und JavaScript) durch Backend-Python-Code zu erzeugen. Die Frontend-Objekte werden dabei durch das Python-Objektmodell dargestellt. 1. Anvil Die Macher des Web Frameworks Anvil versprechen, “Webanwendungen mit nichts anderem als Python zu erstellen”. Allerdings können Sie dabei auch auf Low-Code-Tools mit Drag-and-Drop-Funktion zurückgreifen. Am Ende steht eine vollwertige Webanwendung mit einem interaktiven, JavaScript-basierten Frontend und einem Python-basierten Backend. Anvil bietet dabei zwei grundlegende Ansätze: Der Cloud Service ist in verschiedenen Preisstufen erhältlich und bietet visuelle Build-Tools sowie eine Reihe von Hosting-Optionen. Die quelloffene Laufzeitumgebung von Anvil enthält kein Design-Tool, ermöglicht es aber, Anwendungen mit manuell geschriebenem Code zu erstellen und auszuführen. Anvil-Anwendungen bestehen grundsätzlich aus drei Komponenten: der Benutzeroberfläche (die sich manuell oder mit Low-Code-Tools erstellen lässt), dem clientseitigen Code (der von Python nach JavaScript transpiliert wird), sowie dem serverseitigen Python-Code. Der Anvil-Cloud-Editor generiert automatisch Backend- und Frontend-Code im Stil von Tools wie Qt Design Studio. Er enthält standardmäßig einige Beispiele – etwa eine einfache, statische Applikation ohne Backend-Code, ein simples Ticketing-System und einen vollständigen Onlineshop. Diese dienen potenziell als Template für Ihr eigenes Projekt. Die Cloud-Inkarnation von Anvil bietet ein mächtiges Visual-Design-Tool für UIs. Einmal generiert, können Sie den Code auch jenseits des Tools einsetzen.IDG Darüber hinaus bietet Anvil auch eine nützliche Auswahl an UI-Komponenten, die Sie in Ihre Webseiten einbinden können. Dazu gehört beispielsweise ein Timer, der dafür sorgt, dass Code in bestimmten Intervallen ausgeführt wird – etwa, um Datenquellen nach Aktualisierungen abzufragen. Bei Bedarf können Sie auch Ihr eigenes HTML und eigene Komponenten erstellen. Datenquellen lassen sich über die Cloud hinzufügen und mit Komponenten verdrahten, so dass gängige CRUD-Applikationen sehr flott entstehen. Wenn Sie sich dazu entscheiden, die Anvil Runtime zu nutzen, können Sie Anwendungen manuell schreiben und dabei einige Templates als Startpunkt nutzen. Code-Änderungen werden sofort auf den Anwendungsserver übertragen, was einen schnellen Entwicklungszyklus ermöglicht. Bei den Elementen der Benutzeroberfläche handelt es sich im Wesentlichen um Instanzen von Python-Klassen, deren Ereignis-Handler über Klassenmethoden hinzugefügt werden. Über gut durchdachte allgemeine Methoden lassen sich auch programmatische Verhaltensweisen hinzufügen. Wenn Sie beispielsweise einen Event bei den Children eines Objects auslösen möchten, brauchen Sie dafür keinen Loop. Stattdessen nutzen Sie einfach die raise_event_on_children-Methode für das Container-Objekt. Standardmäßig wird der gesamte JavaScript-Code für eine Anvil-Site automatisch generiert, Sie können bei Bedarf aber auch Ihren eigenen schreiben. In diesem Fall sollten Sie darauf achten, dass dieser nicht mit dem Anvil-Code in Konflikt gerät. Zudem sind einige der Anvil-eigenen Abhängigkeiten etwas veraltet, zum Beispiel Bootstrap 3. Dieses Problem können Sie umgehen, indem Sie ein benutzerdefiniertes Theme erstellen – was nicht leider nicht trivial ist. 2. Reflex Das Reflex-Framework (ehemals bekannt als Pynecone) kann nicht mit dem Design-Toolset von Anvil aufwarten, entspringt jedoch derselben Grundidee: Python-Code zu verwenden, um sowohl das Backend Ihres Web-Stacks zu coden, als auch das Frontend programmatisch zu generieren, ohne dabei auf JavaScript zurückgreifen zu müssen. Zu Pynecone-Zeiten verwendete das Framework selbst sowohl Python als auch die (Long-term Support-Version der) Node.js-Laufzeitumgebung in Kombination mit dem Bun JavaScript Library Manager. Reflex benötigt lediglich Python in Version 3.8 (oder höher) und funktioniert unter Linux und Windows. Benutzern des Microsoft-Betriebssystems wird für eine optimale Performance allerdings empfohlen, das Windows-Subsystem für Linux (WSL) zu nutzen. Um ein neues Reflex-Projekt aufzusetzen, nutzen Sie den reflex-Befehl. Ein Beispiel für eine Reflex-Webanwendung in Python. Der interaktive Chart unterstreicht die Widget-Vielfalt von Reflex.IDG Das Frontend einer Reflex-App kompiliert zu einer React-Anwendung, wobei FastAPI zum Einsatz kommt, um das Python-Backend zu bedienen. Viele gängige Komponenten sind bereits integriert – nicht nur so alltägliche Dinge wie Textlayouts oder Formularverarbeitung, sondern auch: Data Display Objects wie Diagramme, Feedback-Steuerelemente wie Alerts und Fortschrittsbalken sowie Overlay-Objekte wie Modals und Tooltips. Darüber hinaus lassen sich auch benutzerdefinierte React-Komponenten einbinden. Für die Anbindung an Datenquellen enthält Reflex einen Data Layer (SQLAlchemy ORM). Falls Sie eine UI-Komponente anpassen möchten, können die meisten gängigen Modifikationen (wie zum Beispiel CSS-Styling) als Argumente an den Object Constructor übergeben werden, anstatt eine Komponente per Subclassing zu ändern. Für alles andere gibt es benutzerdefiniertes HTML, aber eine Kombination aus den Built-Ins und ihren Optionen sollte für die große Mehrheit der gängigen Projekte ausreichen. Wenn Sie hauptsächlich statische Websites erstellen, bringt Reflex zudem eine praktische Funktion mit, mit der es sich auch als programmatisches Website-Generator-Tool empfiehlt – nämlich eine komplette Webseite in ein statisches Build zu exportieren. 3. NiceGUI Angenommen, Sie möchten einer existierenden Python-App, die über die Kommandozeile oder einen Web Service läuft, ein webbasiertes User Interface hinzufügen – und zwar möglichst schnell. Dann könnten Sie versuchen, ein Frontend in Eigenregie zusammenzuzimmern – oder sich den Aufwand sparen und einfach NiceGUI dafür verwenden. Dieses Python Web Framework nutzt deklarative Syntax, um zu beschreiben, wie UI-Komponenten aussehen und sich verhalten sollen. Das Spektrum an vorgefertigten Komponenten ist dabei breitgefächert und enthält beispielsweise: Buttons, Slider, Text-Label, Eingabefelder, und Datei-Uploader. Darüber hinaus stehen auch einige Optionen für anspruchsvollere Audio- oder Videoanwendungen zur Verfügung, beispielsweise, um Daten interaktiv zu präsentieren oder 3D-Viualisierungen auf die Beine zu stellen. Dabei erfordert keine Komponente auch nur eine einzige Zeile Browser-Code – NiceGUI übernimmt das vollständig für Sie. Eine simple NiceGUI-App mit programmatisch generierten Web Widgets. Die resultierede Applikation lässt sich als Standalone-Programm oder über einen Server bereitstellen.IDG Um vorhandenen Code mit NiceGUI zu wrappen, sollten Sie sich zuvor damit auseinandersetzen, wie NiceGUI beispielsweise mit Event Loops und Application State umgeht. Die gute Nachricht vorab: All das läuft über High-Level-Konstrukte innerhalb des NiceGUI-Frameworks selbst ab. Zum Beispiel: können Sie mit dem ui.timer-Objekt definieren, dass Code in bestimmten Intervallen ausgeführt wird; übernehmen ui.clipboard und app.storage die entsprechenden Prozesse; können langlaufende Tasks mit run.cpu_bound einfach an einen Subprozess delegiert werden – oder an einen Thread (run.io_bound). NiceGUI nutzt FastAPI als internes Web Framework – entsprechend folgen die Applikationen demselben Muster. Sie können darüber hinaus auch vorgefertigte Docker-Images als (containerisierte) Version einer NiceGUI-App nutzen. Oder Sie bündeln Ihre App als Standalone-Executable, um sie möglichst einfach zu verteilen. Welches Python Web Framework nutzen? Zusammenfassend lässt sich festhalten: Anvil besticht vor allem mit seinen Tools, um interaktive Benutzeroberflächen mit wenig bis gar keinem Code zu erstellen. Reflex empfiehlt sich, wenn Sie mit einem React-Frontened arbeiten und statische HTML-Seiten rendern möchten. NiceGUI bietet diverse deklarative Abstraktionen um schnell Anwendungen zu erstellen – inklusive Event Handling. (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox!
3 Python Web Frameworks für Vorzeige-Frontends Wenn Sie interaktive Webseiten erstellen, dabei aber ausschließlich Python nutzen wollen, fahren Sie mit diesen Frameworks besser. Foto: Kurit afshen – shutterstock.com Python hat sich längst als Sprache für serverseitige Frameworks etabliert und unterstützt dabei Projekte jeder Größenordnung und sämtliche Use Cases. Allerdings ist Python bisher auch eher auf das Backend beschränkt – bislang gibt es noch keine wirkliche “Kultur”, Python für Frontend- und Client-seitigen Code zu nutzen. Das liegt auch daran, dass bisherige Versuche, Python am Frontend in JavaScript zu transpilieren oder über WebAssembly auszuführen, eher klobig und bisweilen primitiv umgesetzt wurden. Doch es gibt neue Hoffnung: Einige moderne Web Frameworks ermöglichen es, deklarativen Python-Code im Backend zu schreiben, der programmatisch Frontend-Code generiert. Sie können Python-Objekte verwenden, um HTML-Entitäten und deren JavaScript-gestütztes Verhalten zu beschreiben – und dann das Framework diese Objekte erstellen lassen, wenn sie dem Client übergeben werden. Die folgenden drei Web Frameworks für Python folgen exakt diesem Paradigma. Jedes von ihnen ermöglicht es, Frontend-Code (HTML, CSS und JavaScript) durch Backend-Python-Code zu erzeugen. Die Frontend-Objekte werden dabei durch das Python-Objektmodell dargestellt. 1. Anvil Die Macher des Web Frameworks Anvil versprechen, “Webanwendungen mit nichts anderem als Python zu erstellen”. Allerdings können Sie dabei auch auf Low-Code-Tools mit Drag-and-Drop-Funktion zurückgreifen. Am Ende steht eine vollwertige Webanwendung mit einem interaktiven, JavaScript-basierten Frontend und einem Python-basierten Backend. Anvil bietet dabei zwei grundlegende Ansätze: Der Cloud Service ist in verschiedenen Preisstufen erhältlich und bietet visuelle Build-Tools sowie eine Reihe von Hosting-Optionen. Die quelloffene Laufzeitumgebung von Anvil enthält kein Design-Tool, ermöglicht es aber, Anwendungen mit manuell geschriebenem Code zu erstellen und auszuführen. Anvil-Anwendungen bestehen grundsätzlich aus drei Komponenten: der Benutzeroberfläche (die sich manuell oder mit Low-Code-Tools erstellen lässt), dem clientseitigen Code (der von Python nach JavaScript transpiliert wird), sowie dem serverseitigen Python-Code. Der Anvil-Cloud-Editor generiert automatisch Backend- und Frontend-Code im Stil von Tools wie Qt Design Studio. Er enthält standardmäßig einige Beispiele – etwa eine einfache, statische Applikation ohne Backend-Code, ein simples Ticketing-System und einen vollständigen Onlineshop. Diese dienen potenziell als Template für Ihr eigenes Projekt. Die Cloud-Inkarnation von Anvil bietet ein mächtiges Visual-Design-Tool für UIs. Einmal generiert, können Sie den Code auch jenseits des Tools einsetzen.IDG Darüber hinaus bietet Anvil auch eine nützliche Auswahl an UI-Komponenten, die Sie in Ihre Webseiten einbinden können. Dazu gehört beispielsweise ein Timer, der dafür sorgt, dass Code in bestimmten Intervallen ausgeführt wird – etwa, um Datenquellen nach Aktualisierungen abzufragen. Bei Bedarf können Sie auch Ihr eigenes HTML und eigene Komponenten erstellen. Datenquellen lassen sich über die Cloud hinzufügen und mit Komponenten verdrahten, so dass gängige CRUD-Applikationen sehr flott entstehen. Wenn Sie sich dazu entscheiden, die Anvil Runtime zu nutzen, können Sie Anwendungen manuell schreiben und dabei einige Templates als Startpunkt nutzen. Code-Änderungen werden sofort auf den Anwendungsserver übertragen, was einen schnellen Entwicklungszyklus ermöglicht. Bei den Elementen der Benutzeroberfläche handelt es sich im Wesentlichen um Instanzen von Python-Klassen, deren Ereignis-Handler über Klassenmethoden hinzugefügt werden. Über gut durchdachte allgemeine Methoden lassen sich auch programmatische Verhaltensweisen hinzufügen. Wenn Sie beispielsweise einen Event bei den Children eines Objects auslösen möchten, brauchen Sie dafür keinen Loop. Stattdessen nutzen Sie einfach die raise_event_on_children-Methode für das Container-Objekt. Standardmäßig wird der gesamte JavaScript-Code für eine Anvil-Site automatisch generiert, Sie können bei Bedarf aber auch Ihren eigenen schreiben. In diesem Fall sollten Sie darauf achten, dass dieser nicht mit dem Anvil-Code in Konflikt gerät. Zudem sind einige der Anvil-eigenen Abhängigkeiten etwas veraltet, zum Beispiel Bootstrap 3. Dieses Problem können Sie umgehen, indem Sie ein benutzerdefiniertes Theme erstellen – was nicht leider nicht trivial ist. 2. Reflex Das Reflex-Framework (ehemals bekannt als Pynecone) kann nicht mit dem Design-Toolset von Anvil aufwarten, entspringt jedoch derselben Grundidee: Python-Code zu verwenden, um sowohl das Backend Ihres Web-Stacks zu coden, als auch das Frontend programmatisch zu generieren, ohne dabei auf JavaScript zurückgreifen zu müssen. Zu Pynecone-Zeiten verwendete das Framework selbst sowohl Python als auch die (Long-term Support-Version der) Node.js-Laufzeitumgebung in Kombination mit dem Bun JavaScript Library Manager. Reflex benötigt lediglich Python in Version 3.8 (oder höher) und funktioniert unter Linux und Windows. Benutzern des Microsoft-Betriebssystems wird für eine optimale Performance allerdings empfohlen, das Windows-Subsystem für Linux (WSL) zu nutzen. Um ein neues Reflex-Projekt aufzusetzen, nutzen Sie den reflex-Befehl. Ein Beispiel für eine Reflex-Webanwendung in Python. Der interaktive Chart unterstreicht die Widget-Vielfalt von Reflex.IDG Das Frontend einer Reflex-App kompiliert zu einer React-Anwendung, wobei FastAPI zum Einsatz kommt, um das Python-Backend zu bedienen. Viele gängige Komponenten sind bereits integriert – nicht nur so alltägliche Dinge wie Textlayouts oder Formularverarbeitung, sondern auch: Data Display Objects wie Diagramme, Feedback-Steuerelemente wie Alerts und Fortschrittsbalken sowie Overlay-Objekte wie Modals und Tooltips. Darüber hinaus lassen sich auch benutzerdefinierte React-Komponenten einbinden. Für die Anbindung an Datenquellen enthält Reflex einen Data Layer (SQLAlchemy ORM). Falls Sie eine UI-Komponente anpassen möchten, können die meisten gängigen Modifikationen (wie zum Beispiel CSS-Styling) als Argumente an den Object Constructor übergeben werden, anstatt eine Komponente per Subclassing zu ändern. Für alles andere gibt es benutzerdefiniertes HTML, aber eine Kombination aus den Built-Ins und ihren Optionen sollte für die große Mehrheit der gängigen Projekte ausreichen. Wenn Sie hauptsächlich statische Websites erstellen, bringt Reflex zudem eine praktische Funktion mit, mit der es sich auch als programmatisches Website-Generator-Tool empfiehlt – nämlich eine komplette Webseite in ein statisches Build zu exportieren. 3. NiceGUI Angenommen, Sie möchten einer existierenden Python-App, die über die Kommandozeile oder einen Web Service läuft, ein webbasiertes User Interface hinzufügen – und zwar möglichst schnell. Dann könnten Sie versuchen, ein Frontend in Eigenregie zusammenzuzimmern – oder sich den Aufwand sparen und einfach NiceGUI dafür verwenden. Dieses Python Web Framework nutzt deklarative Syntax, um zu beschreiben, wie UI-Komponenten aussehen und sich verhalten sollen. Das Spektrum an vorgefertigten Komponenten ist dabei breitgefächert und enthält beispielsweise: Buttons, Slider, Text-Label, Eingabefelder, und Datei-Uploader. Darüber hinaus stehen auch einige Optionen für anspruchsvollere Audio- oder Videoanwendungen zur Verfügung, beispielsweise, um Daten interaktiv zu präsentieren oder 3D-Viualisierungen auf die Beine zu stellen. Dabei erfordert keine Komponente auch nur eine einzige Zeile Browser-Code – NiceGUI übernimmt das vollständig für Sie. Eine simple NiceGUI-App mit programmatisch generierten Web Widgets. Die resultierede Applikation lässt sich als Standalone-Programm oder über einen Server bereitstellen.IDG Um vorhandenen Code mit NiceGUI zu wrappen, sollten Sie sich zuvor damit auseinandersetzen, wie NiceGUI beispielsweise mit Event Loops und Application State umgeht. Die gute Nachricht vorab: All das läuft über High-Level-Konstrukte innerhalb des NiceGUI-Frameworks selbst ab. Zum Beispiel: können Sie mit dem ui.timer-Objekt definieren, dass Code in bestimmten Intervallen ausgeführt wird; übernehmen ui.clipboard und app.storage die entsprechenden Prozesse; können langlaufende Tasks mit run.cpu_bound einfach an einen Subprozess delegiert werden – oder an einen Thread (run.io_bound). NiceGUI nutzt FastAPI als internes Web Framework – entsprechend folgen die Applikationen demselben Muster. Sie können darüber hinaus auch vorgefertigte Docker-Images als (containerisierte) Version einer NiceGUI-App nutzen. Oder Sie bündeln Ihre App als Standalone-Executable, um sie möglichst einfach zu verteilen. Welches Python Web Framework nutzen? Zusammenfassend lässt sich festhalten: Anvil besticht vor allem mit seinen Tools, um interaktive Benutzeroberflächen mit wenig bis gar keinem Code zu erstellen. Reflex empfiehlt sich, wenn Sie mit einem React-Frontened arbeiten und statische HTML-Seiten rendern möchten. NiceGUI bietet diverse deklarative Abstraktionen um schnell Anwendungen zu erstellen – inklusive Event Handling. (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox!