Saltar a contenido
Traducción automática supervisada

Este contenido se traduce mediante generación automática guiada por glosarios y guías de estilo revisados por personas. Dado que el texto no se revisa manualmente línea por línea, pueden producirse errores ocasionales o expresiones poco naturales.

En caso de cualquier discrepancia, la versión en inglés constituye la autoridad y la fuente de referencia.

Leer la versión original en inglés

Nueva documentación  ·  Vea qué ha cambiado

Interfaces de administración extensibles
para FastAPI & Starlette

Genere una interfaz de administración completa a partir de sus modelos de SQLAlchemy, SQLModel, Beanie, MongoEngine o Tortoise ORM. Construido sobre el kit de interfaz de usuario Tabler, starlette-admin le ofrece vistas de lista, formularios generados automáticamente, exportación de datos y autenticación segura. Configure toda la interfaz en Python, sin escribir código de frontend.

pip install starlette-admin
starlette-admin dashboard showing statistical widgets, recent activity tables, and a sidebar for model views

Funcionalidades integradas

Todo lo que necesita funciona desde el primer momento. Cada funcionalidad principal incluye puntos de extensión documentados, de modo que pueda adaptarla a sus requisitos.

Tablas

Explore, busque y ordene sus datos con paginación, ordenación por varias columnas y URL que conservan el estado. Edite los campos en línea desde la vista de lista.

Filtros

Cree consultas AND/OR anidadas en la interfaz, con operadores adaptados al tipo de dato para texto, números, fechas y booleanos.

Formularios y cargas de archivos

Genere formularios automáticamente para más de 25 tipos de campo y para datos relacionales. Envíe las cargas de archivos a almacenamiento local o S3.

Acciones

Cree operaciones masivas y a nivel de fila con decoradores estándar de Python. Proteja cada ejecución detrás de modales de confirmación y formularios de payload personalizados.

Exportación e importación

Exporte registros a CSV, Excel, JSON, PDF o cualquier formato compatible con tablib. Importe datos en bloque con un asistente que muestra primero la vista previa y valida cada fila antes de escribir en la base de datos.

Autenticación y seguridad

Conecte el proveedor de autenticación que ya utiliza. Despliegue con valores predeterminados listos para producción, incluida la protección CSRF y límites integrados para exportaciones e importaciones.

Formularios en línea

Gestione los datos relacionales en su lugar. Edite los registros secundarios dentro del formulario del modelo principal sin salir de la página.

Paneles de control

Cree una página de inicio a partir de widgets integrados de estadísticas, gráficos y tablas, o reemplácela por una vista totalmente personalizada.

i18n y zonas horarias

Sirva el panel de administración en varios idiomas, con formato adaptado a la configuración regional y manejo preciso de zonas horarias desde el primer momento.

Todo es Python

Cree una interfaz de administración completa con una API pura de Python diseñada para el desarrollo rápido, la sintaxis legible y el mantenimiento a largo plazo.

Montar el panel de administración

Registre un modelo y monte el panel de administración en cualquier aplicación de FastAPI o Starlette. A continuación, ejecute fastapi dev y abra /admin.

Ver la documentación

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)

Vistas

Defina la búsqueda, la ordenación, el orden predeterminado y los formatos de exportación con atributos de clase sencillos. Organice sus formularios de creación y edición con form_layout.

Ver la documentación

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"))

Campos

Sustituya cualquier campo detectado automáticamente para controlar la validación, la visibilidad por página y cómo starlette-admin lee y muestra los valores.

Ver la documentación

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),
    ]

Filtros

Amplíe el constructor de consultas integrado con filtros personalizados que se ajusten a sus reglas de negocio. Puede aplicar las operaciones que necesite directamente sobre el modelo de base de datos subyacente.

Ver la documentación

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, ...],
        ),
    ]

Acciones

Adjunte operaciones de negocio con un solo decorador. Los modales de confirmación, los formularios personalizados y los mensajes flash están integrados en el framework.

Ver la documentación

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")

Autenticación

Implemente tres métodos estándar en torno a su propia comprobación de credenciales. starlette-admin gestiona por usted la página de inicio de sesión, las sesiones y las redirecciones.

Ver la documentación

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)

Panel de control

Componga la página de inicio del panel de administración con widgets de estadísticas, gráficos y tablas que consultan datos en vivo en cada solicitud.

Ver la documentación

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 y extensiones

Cada capa es sustituible. Empaquete funcionalidades como plugins autocontenidos o conéctese a un punto de extensión dedicado para adaptar el framework a su dominio.

Plugins listos para usar

Plugins sin boilerplate

Instale un paquete de plugin y páselo a su instancia de Admin. Los campos, convertidores, plantillas y recursos se conectan entre sí automáticamente.

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

admin = Admin(
    engine,
    plugins=[GeospatialPlugin(default_zoom=13)],
)
Lea la guía de plugins
Puntos de extensión

Conéctese a cualquier componente

Las interfaces predefinidas le permiten sustituir o extender cada aspecto de forma independiente. Cree una subclase de la clase base que necesite y regístrela. Puede personalizarlo todo, desde el flujo de autenticación hasta los formatos de exportación.

Explore todos los puntos de extensión