Zum Inhalt
Überwachte maschinelle Übersetzung

Dieser Inhalt wurde maschinell übersetzt und basiert auf von Menschen kuratierten Glossaren und Styleguides. Da der Text nicht zeilenweise manuell überprüft wird, können gelegentlich Fehler oder unklare Formulierungen auftreten.

Bei etwaigen Abweichungen ist die ursprüngliche englische Version die maßgebliche Quelle.

Lesen Sie die ursprüngliche englische Version

Neue Dokumentation  ·  Sehen Sie, was sich geändert hat

Erweiterbare Admin-Oberflächen
für FastAPI & Starlette

Generieren Sie eine vollständige Admin-Oberfläche aus Ihren SQLAlchemy-, SQLModel-, Beanie-, MongoEngine- oder Tortoise-ORM-Modellen. Basierend auf dem Tabler UI kit bietet Ihnen starlette-admin Listenansichten, automatisch generierte Formulare, Datenexporte und eine sichere Authentifizierung. Konfigurieren Sie die gesamte Oberfläche in Python – ganz ohne Frontend-Code.

pip install starlette-admin
starlette-admin-Dashboard mit statistischen Widgets, Tabellen mit aktuellen Aktivitäten und einer Seitenleiste für Modellansichten

Integrierte Funktionen

Alles, was Sie benötigen, funktioniert sofort nach der Installation. Jede Kernfunktion verfügt über dokumentierte Erweiterungspunkte, sodass Sie sie an Ihre Anforderungen anpassen können.

Tabellen

Durchsuchen, filtern und sortieren Sie Ihre Daten mit Paginierung, Sortierung über mehrere Spalten und zustandserhaltenden URLs. Bearbeiten Sie Felder direkt aus der Listenansicht heraus.

Filter

Erstellen Sie verschachtelte AND/OR-Abfragen direkt in der Benutzeroberfläche – mit typspezifischen Operatoren für Text, Zahlen, Datumsangaben und boolesche Werte.

Formulare & Uploads

Generieren Sie Formulare automatisch für mehr als 25 Feldtypen sowie für relationale Daten. Senden Sie Datei-Uploads an lokalen oder S3-Speicher.

Aktionen

Erstellen Sie Massenoperationen und Operationen auf Zeilenebene mit Standard-Python-Decorators. Sichern Sie jede Ausführung hinter Bestätigungsdialogen und benutzerdefinierten Formularen für Nutzdaten ab.

Export & Import

Exportieren Sie Datensätze als CSV, Excel, JSON, PDF oder in jedes von tablib unterstützte Format. Importieren Sie Daten in Massen mit einem Assistenten, der zunächst eine Vorschau anzeigt und jede Zeile validiert, bevor sie in die Datenbank geschrieben wird.

Authentifizierung & Sicherheit

Binden Sie den Authentifizierungsanbieter Ihrer Wahl an. Setzen Sie das Projekt mit produktionsreifen Standardeinstellungen ein, einschließlich CSRF-Schutz und integrierter Limits für Exporte und Importe.

Inline-Formulare

Verwalten Sie relationale Daten direkt am Ort ihrer Verwendung. Bearbeiten Sie untergeordnete Datensätze innerhalb des Formulars des übergeordneten Modells, ohne die Seite zu verlassen.

Dashboards

Gestalten Sie Ihre Startseite aus integrierten Statistik-, Diagramm- und Tabellen-Widgets oder ersetzen Sie sie durch eine vollständig eigene View.

i18n & Zeitzonen

Bieten Sie die Admin-Oberfläche in mehreren Sprachen an – mit länderspezifischer Formatierung und präziser Zeitzonenbehandlung ab sofort ohne Zusatzkonfiguration.

Alles ist Python

Erstellen Sie eine vollständige Admin-Oberfläche mit einer reinen Python-API, die auf schnelle Entwicklung, lesbare Syntax und langfristige Wartbarkeit ausgelegt ist.

Das Admin-Panel einbinden

Registrieren Sie ein Modell und binden Sie das Admin-Panel in jede FastAPI- oder Starlette-Anwendung ein. Führen Sie anschließend fastapi dev aus und öffnen Sie /admin.

Dokumentation anzeigen

main.py
from fastapi import FastAPI
from sqlalchemy import create_engine
from starlette_admin.contrib.sqla import Admin, ModelView

from models import Base, Post

engine = create_engine("sqlite:///blog.db")
Base.metadata.create_all(engine)

app = FastAPI()

admin = Admin(engine, title="Blog Admin", secret_key="change-me")
admin.add_view(ModelView(Post, icon="fa fa-newspaper"))
admin.mount_to(app)

Views

Legen Sie Suche, Sortierung, Standardsortierung und Exportformate über einfache Klassenattribute fest. Ordnen Sie Ihre Create- und Edit-Formulare mit form_layout an.

Dokumentation anzeigen

views.py
from starlette_admin.contrib.sqla import ModelView


class PostView(ModelView):
    fields = ["id", "title", "author", "content", "published", "created_at"]
    searchable_fields = ["title", "content"]
    fields_default_sort = [("created_at", True)]
    exporters = ["csv", "xlsx", "json"]
    form_layout = [
        ("title", "author"),
        "content",
        ("published", "created_at"),
    ]


admin.add_view(PostView(Post, icon="fa fa-newspaper"))

Fields

Überschreiben Sie jedes automatisch erkannte Feld, um Validierung, Sichtbarkeit pro Ansicht sowie das Einlesen und Anzeigen von Werten durch starlette-admin zu steuern.

Dokumentation anzeigen

views.py
from starlette_admin import DateTimeField, RequestAction, StringField, TextAreaField
from starlette_admin.contrib.sqla import ModelView


class PostView(ModelView):
    fields = [
        "id",
        StringField("title", required=True, help_text="Shown on the blog"),
        TextAreaField("content", exclude_from_list=True),
        StringField(
            "author_email",
            getter=lambda request, obj: obj.author.email,
            formatter={RequestAction.LIST: lambda request, value: value or "unset"},
        ),
        DateTimeField("created_at", read_only=True, exclude_from_create=True),
    ]

Filters

Erweitern Sie den integrierten Query Builder um eigene Filter, die Ihren Geschäftsregeln entsprechen. Sie können die benötigten Operationen direkt auf das zugrunde liegende Datenbankmodell anwenden.

Dokumentation anzeigen

filters.py
from datetime import datetime
from typing import Any

from starlette_admin.contrib.sqla import ModelView
from starlette_admin.filters.base import BaseFilter, FilterApplyContext, FilterDataType


class ActiveThisMonthFilter(BaseFilter):
    name = "this_month"
    label = "Created this month"
    data_type = FilterDataType.NONE  # No value input. The range comes from now().

    def apply(self, ctx: FilterApplyContext) -> Any:
        now = datetime.utcnow()
        start = now.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
        col = getattr(ctx.view.model, ctx.field_name)
        return col.between(start, now)

class ProductView(ModelView):
    fields = [
        DateTimeField(
            "created_at",
            filters=[ActiveThisMonthFilter, ...],
        ),
    ]

Actions

Binden Sie Geschäftsoperationen mit einem einzigen Decorator an. Bestätigungsdialoge, benutzerdefinierte Formulare und Flash-Meldungen sind bereits im framework integriert.

Dokumentation anzeigen

views.py
from starlette.requests import Request
from starlette_admin import ActionSelection, action, flash
from starlette_admin.contrib.sqla import ModelView


class ArticleView(ModelView):
    actions = ["publish", "delete"]

    @action(
        name="publish",
        text="Mark as published",
        confirmation="Publish the selected articles?",
        submit_btn_text="Yes, publish",
    )
    async def publish(self, request: Request, selection: ActionSelection) -> None:
        articles = await selection.rows()
        for article in articles:
            article.published = True
        flash(request, f"{len(articles)} articles published.", "success")

Authentifizierung

Implementieren Sie drei Standardmethoden rund um Ihre eigene Überprüfung der Zugangsdaten. Die Login-Seite, Sitzungen und Weiterleitungen übernimmt starlette-admin für Sie.

Dokumentation anzeigen

auth.py
from starlette.requests import Request
from starlette_admin.auth import AdminUser, AuthProvider, LoginFailed


class MyAuthProvider(AuthProvider):
    async def login(self, username, password, remember_me, request: Request) -> None:
        if not await check_credentials(username, password):
            raise LoginFailed("Invalid username or password")
        request.session["username"] = username

    async def authenticate(self, request: Request) -> AdminUser | None:
        if username := request.session.get("username"):
            return AdminUser(username=username)
        return None

    async def logout(self, request: Request) -> None:
        request.session.clear()


admin = Admin(engine, auth_provider=MyAuthProvider(), secret_key=SECRET)

Dashboard

Setzen Sie die Startseite der Admin-Oberfläche aus Statistik-, Diagramm- und Tabellen-Widgets zusammen, die bei jeder Anfrage Live-Daten abfragen.

Dokumentation anzeigen

dashboard.py
from starlette_admin import CardRowWidget, ChartWidget, CustomView, StatWidget

dashboard = CardRowWidget(
    children=[
        StatWidget(title="Orders", value_callback=count_orders, countup=True),
        StatWidget(title="Revenue", value_callback=sum_revenue, color="success"),
        ChartWidget(title="Sales", chart_type="area", series_callback=sales_series),
    ]
)

admin = Admin(
    engine,
    title="Shop Admin",
    secret_key="change-me",
    index_view=CustomView(menu_label="Dashboard", icon="fa fa-home", widget=dashboard),
)

Plugins & Erweiterungen

Jede Ebene ist austauschbar. Paketieren Sie Funktionen als eigenständige Plugins oder greifen Sie auf dedizierte Erweiterungspunkte zu, um das framework an Ihre Domäne anzupassen.

Fertige Plugins

Plugins ohne Boilerplate

Installieren Sie ein Plugin-Paket und übergeben Sie es an Ihre Admin-Instanz. Felder, Konverter, Templates und Assets verdrahten sich automatisch miteinander.

from starlette_admin_geospatial import GeospatialPlugin
from starlette_admin.contrib.sqla import Admin

admin = Admin(
    engine,
    plugins=[GeospatialPlugin(default_zoom=13)],
)
Zum Plugin-Leitfaden
Erweiterungspunkte

In jede Komponente eingreifen

Vordefinierte Schnittstellen ermöglichen es Ihnen, jeden einzelnen Aspekt unabhängig voneinander auszutauschen oder zu erweitern. Unterklassifizieren Sie die benötigte Basisklasse und registrieren Sie sie. Sie können alles anpassen – vom Authentifizierungsablauf bis zu den Exportformaten.

Alle Erweiterungspunkte entdecken