Web-Frameworks
Dashboards werden als Smart Service von einem Webserver (Request) an den Client (Response) ausgeliefert. Dazu können unterschiedlichste Umgebungen bzw. Frameworks genutzt werden. Hier soll ein Überblick über die einige wenige (und möglichst einfach zu nutzende) Frameworks gegeben werden.
Micro-Frameworks
Micro-Frameworks stellen einige Basis-Funktionalitäten eines Webservers zur Verfügung:
- Routing / Endpoints
- HTTP-Serving
Bottle
Sehr einfaches Framework, das Template-Engines wie Mako, Jinja2 und Cheetah unterstützt.
Minimal-Beispiel
from bottle import route, run, template
@route('/hello/<name>')
def index(name):
return template('<b>Hello {{name}}</b>!', name=name)
run(host='localhost', port=8080)
Flask
Das wohl am weitesten verbreitete Framework ist Flask. Die Entwicklung von Routing und Serving wird durch die Render-Template-Engine Jinja2
erheblich vereinfacht. Flask bietet folgende Funktionalitäten:
- Routing / Endpoints
- Templating
- static / dynamic
- blueprint
- Redirect
- Sessions
- HTTP-Serving
Direkt zum Kapitel: Flask
Minimal-Beispiel
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
app.run(host='127.0.0.1', port=5000)
FastApi
FastApi ist ein sehr performantes Framework, das neben dem HTTP-Serving insbesondere die RestApi-Schnittstelle gemäß OpenApi anbietet. Es baut auf der Webserver-Lib Starlette auf und unterstützt neben dem HTTP auch Websockets.
Minimal-Beispiel
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=8008)
Direkt zum Kapitel: FastApi
Full-Stack-Frameworks
Django
Mit Django steht das wohl mächtigste Framework zur Verfügung.
Reflex
basiert auf React, wird vollständig in Python programmiert.
Python-gestützte Fullframe-Frameworks
Die nächste Stufe stellt die vollständige Intergration der Webcontentgenerieung in das Python-Programm dar. Hier sind wiederum verschieden komplexe Frameworks zu finden.
Dash
Der Schwerpunkt von Plotly-Dash liegt in der grafischen Visualisierung mittels Linechart, realisiert durch das sehr etablierte Plotly
.
Minimal-Beispiel
from dash import Dash, html, dcc, callback, Output, Input
import plotly.express as px
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminder_unfiltered.csv')
app = Dash()
app.layout = [
html.H1(children='Title of Dash App', style={'textAlign':'center'}),
dcc.Dropdown(df.country.unique(), 'Canada', id='dropdown-selection'),
dcc.Graph(id='graph-content')
]
@callback(
Output('graph-content', 'figure'),
Input('dropdown-selection', 'value')
)
def update_graph(value):
dff = df[df.country==value]
return px.line(dff, x='year', y='pop')
if __name__ == '__main__':
app.run(debug=True)
Neben der Plotly-Komponente gibt es zahlreiche Erweiterungen, wie etwas dash-mantine-components, die die Möglichkeiten der Visualisierungselemente und von Dateneingabeelementen erhöhen.
TaiPy
Die Trennung von Datenbackend und einem Konzept der Datenanalyse-Szenarien und dem Frontend bietet TaiPy.
niceGUI
Das aus einem deutschen Forschungsvorhaben entstande niceGui ermöglicht eine besonders einfache Implementierung von Live-Daten- Zyklen. Diese zeichnet sich außerdem durch eine hervorragende Performance aus. Als grafische Widgets lassen sich unterschiedliche Bibliotheken verwenden:
- Plotly
- 3D-Scenen three.js
- Apache EChart