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.
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
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.
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.
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.
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.
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.
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.
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.
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 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.
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.
- Campos personalizados
BaseField - Filtros personalizados
BaseFilter - Exportadores
BaseExporter - Importadores
BaseImporter - Temas
BaseTheme - Proveedores de autenticación
BaseAuthProvider - Backends de almacenamiento
BaseStorage - Widgets del panel
BaseWidget - Plantillas
templates_dir