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

Schnellstart

Erstellen Sie in wenigen Minuten eine voll funktionsfähige CRUD-Admin-Oberfläche für einen Blog – mit automatisch generierten Formularen, Listen, Suche, Import und Export, die direkt aus Ihren Datenmodellen erzeugt werden.

Installation

Installieren Sie die erforderlichen Pakete mit Ihrem bevorzugten Paketmanager:

pip install starlette-admin sqlalchemy "fastapi[standard]"
uv add starlette-admin sqlalchemy "fastapi[standard]"

Note

Das Paket fastapi[standard] enthält die FastAPI CLI, mit der Sie den Entwicklungsserver durch Ausführen von fastapi dev starten können.

Das vollständige Beispiel

Erstellen Sie eine Datei namens main.py und fügen Sie den folgenden Code hinzu:

from contextlib import asynccontextmanager
from datetime import datetime, timezone

from fastapi import FastAPI
from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from starlette_admin.contrib.sqla import Admin, ModelView

engine = create_engine("sqlite:///blog.db", connect_args={"check_same_thread": False})


class Base(DeclarativeBase):
    pass


class Post(Base):
    __tablename__ = "posts"

    id: Mapped[int] = mapped_column(primary_key=True)
    title: Mapped[str]
    content: Mapped[str]
    published: Mapped[bool] = mapped_column(default=False)
    created_at: Mapped[datetime] = mapped_column(
        default=lambda: datetime.now(timezone.utc)
    )


class PostView(ModelView):
    fields = ["id", "title", "content", "published", "created_at"]
    searchable_fields = ("title", "content")


@asynccontextmanager
async def lifespan(app: FastAPI):
    Base.metadata.create_all(engine)
    yield


# Note: This can also be replaced by Starlette(lifespan=lifespan)
app = FastAPI(lifespan=lifespan)

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

Anwendung ausführen

Starten Sie den Entwicklungsserver:

fastapi dev
uv run -- fastapi dev

Öffnen Sie einen Browser und navigieren Sie zu http://127.0.0.1:8000/admin.

Wählen Sie in der Seitenleiste Posts und anschließend Create. Sie haben nun Zugriff auf paginierte Listen-, Detail-, Erstellungs-, Bearbeitungs- und Löschseiten. Das System generiert alle diese Oberflächen automatisch aus Ihrer Modelldefinition.

Funktionsweise

Die folgenden Abschnitte erläutern die zentralen Komponenten der Anwendung.

Das Modell

class Post(Base):
    __tablename__ = "posts"

    id: Mapped[int] = mapped_column(primary_key=True)
    title: Mapped[str]
    content: Mapped[str]
    published: Mapped[bool] = mapped_column(default=False)
    created_at: Mapped[datetime] = mapped_column(
        default=lambda: datetime.now(timezone.utc)
    )

Dieser Code verwendet Standard-SQLAlchemy 2.0. Das Paket starlette-admin liest die Spaltenmetadaten, die diesen Attributen zugeordnet sind, um das exakte HTML-Eingabefeld zu bestimmen, das generiert werden soll. Beispielsweise erstellt es ein Textfeld für str, ein Kontrollkästchen für bool und einen Datums-Zeit-Auswahl für datetime.

Die View

class PostView(ModelView):
    fields = ["id", "title", "content", "published", "created_at"]
    searchable_fields = ("title", "content")

PostView dient als zentrales Objekt für diese Ressource. Das Attribut fields steuert, welche Spalten in der Liste und im Formular erscheinen, während searchable_fields die Suchleiste aktiviert. Sämtliche Konfigurationen dafür, wie Post im Admin-Dashboard aussieht und sich verhält, befinden sich in dieser einzigen Klasse.

Note

Das Beispiel importiert ModelView aus starlette_admin.contrib.sqla, da es auf SQLAlchemy basiert. Wenn Sie ein anderes Backend verwenden, etwa Beanie, MongoEngine oder Tortoise ORM, müssen Sie ModelView aus dem entsprechenden contrib-Paket importieren. Die Konfigurations-API bleibt über alle unterstützten Backends hinweg konsistent.

Der Admin

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

Die Klasse Admin verbindet die Datenbank-Engine mit der Benutzeroberfläche.

  • add_view registriert Ihre View in der Seitenleiste. Der optionale Parameter icon akzeptiert jede gültige Font Awesome-Klasse.
  • mount_to bindet die Admin-Anwendung unter dem Pfad /admin an Ihre FastAPI- oder Starlette-Anwendung an.

Warning

Der Parameter secret_key signiert Cookies für Sitzungsdaten, einschließlich Flash-Nachrichten und CSRF-Schutz. In Produktionsumgebungen müssen Sie den Beispielwert durch eine lange, zufällige und sicher generierte Zeichenkette ersetzen. Verwenden Sie niemals einen Platzhalterwert in einer Live-Bereitstellung.

Ein zweites Modell hinzufügen

Sie können eine unbegrenzte Anzahl von Modellen registrieren. Um beispielsweise ein Tag-Modell mit der entsprechenden View hinzuzufügen, definieren Sie die Klassen und rufen add_view erneut auf:

class Tag(Base):
    __tablename__ = "tags"

    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]


class TagView(ModelView):
    fields = ["id", "name"]
    searchable_fields = ("name",)


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

Laden Sie das Browserfenster neu, um sowohl Posts als auch Tags in der Seitenleiste zu sehen. Jede Ressource verfügt nun über eigene voll funktionsfähige Listen-, Erstellungs-, Bearbeitungs- und Löschseiten.


Nächste Schritte

  • Konzepte: Lernen Sie die Terminologie der hier eingeführten Konzepte kennen, um sich im Benutzerhandbuch besser zurechtzufinden.
  • Admin: Entdecken Sie alle Optionen von Admin(...), einschließlich Branding, Theming, Authentifizierung, Sicherheit und Internationalisierung.
  • Views: Erkunden Sie sämtliche Konfigurationsoptionen von ModelView, die zur Anpassung Ihrer Datenpräsentation zur Verfügung stehen.