Ü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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
- Eigene Fields
BaseField - Eigene Filter
BaseFilter - Exporter
BaseExporter - Importer
BaseImporter - Themes
BaseTheme - Auth-Anbieter
BaseAuthProvider - Storage-Backends
BaseStorage - Dashboard-Widgets
BaseWidget - Templates
templates_dir