Consulte nuestros patrocinadores en los documentos
Si desea apoyar el trabajo que hacemos, considere convertirse en patrocinador a través de Polar.sh (preferido), GitHub u Open Collective.
Además, exclusivamente con Polar, puedes participar en patrocinios basados en promesas.
Si bien admite controladores de rutas basados en funciones, Litestar también admite y promueve la programación orientada a objetos de Python mediante controladores basados en clases:
from typing import List , Optional
from datetime import datetime
from litestar import Controller , get , post , put , patch , delete
from litestar . dto import DTOData
from pydantic import UUID4
from my_app . models import User , PartialUserDTO
class UserController ( Controller ):
path = "/users"
@ post ()
async def create_user ( self , data : User ) -> User : ...
@ get ()
async def list_users ( self ) -> List [ User ]: ...
@ get ( path = "/{date:int}" )
async def list_new_users ( self , date : datetime ) -> List [ User ]: ...
@ patch ( path = "/{user_id:uuid}" , dto = PartialUserDTO )
async def partial_update_user (
self , user_id : UUID4 , data : DTOData [ PartialUserDTO ]
) -> User : ...
@ put ( path = "/{user_id:uuid}" )
async def update_user ( self , user_id : UUID4 , data : User ) -> User : ...
@ get ( path = "/{user_name:str}" )
async def get_user_by_name ( self , user_name : str ) -> Optional [ User ]: ...
@ get ( path = "/{user_id:uuid}" )
async def get_user ( self , user_id : UUID4 ) -> User : ...
@ delete ( path = "/{user_id:uuid}" )
async def delete_user ( self , user_id : UUID4 ) -> None : ...
Litestar está escrito rigurosamente y obliga a escribir. Por ejemplo, si olvida escribir un valor de retorno para un controlador de ruta, se generará una excepción. La razón de esto es que Litestar utiliza datos de escritura para generar especificaciones OpenAPI, así como para validar y analizar datos. Por lo tanto, escribir es esencial para el marco.
Además, Litestar permite ampliar su soporte mediante complementos.
Litestar tiene un sistema de complementos que permite al usuario ampliar la serialización/deserialización, la generación de OpenAPI y otras funciones.
Se entrega con un complemento incorporado para SQL Alchemy, que permite al usuario usar clases declarativas de SQLAlchemy "nativamente", es decir, como parámetros de tipo que serán serializados/deserializados y devolverlos como valores de los controladores de ruta.
Litestar también admite la creación programática de DTO con una clase DTOFactory
, que también admite el uso de complementos.
Litestar tiene una lógica personalizada para generar el esquema OpenAPI 3.1.0, incluye generación opcional de ejemplos utilizando la biblioteca polyfactory
.
Litestar proporciona la documentación del esquema OpenAPI generado con:
Todos estos están disponibles y habilitados de forma predeterminada.
Litestar tiene un sistema DI simple pero potente inspirado en pytest. Puede definir dependencias con nombre (sincronizadas o asíncronas) en diferentes niveles de la aplicación y luego usarlas selectivamente o sobrescribirlas.
from litestar import Litestar , get
from litestar . di import Provide
async def my_dependency () -> str : ...
@ get ( "/" )
async def index ( injected : str ) -> str :
return injected
app = Litestar ([ index ], dependencies = { "injected" : Provide ( my_dependency )})
Litestar admite middleware ASGI típico y se envía con middlewares para manejar cosas como
Litestar tiene un mecanismo de autorización llamado guards
, que permite al usuario definir funciones de protección en diferentes niveles de la aplicación (aplicación, enrutador, controlador, etc.) y validar la solicitud antes de acceder a la función de controlador de ruta.
from litestar import Litestar , get
from litestar . connection import ASGIConnection
from litestar . handlers . base import BaseRouteHandler
from litestar . exceptions import NotAuthorizedException
async def is_authorized ( connection : ASGIConnection , handler : BaseRouteHandler ) -> None :
# validate authorization
# if not authorized, raise NotAuthorizedException
raise NotAuthorizedException ()
@ get ( "/" , guards = [ is_authorized ])
async def index () -> None : ...
app = Litestar ([ index ])
Litestar admite enlaces de ciclo de vida de solicitudes, de manera similar a Flask, es decir, before_request
y after_request
Litestar es rápido. Está a la par o significativamente más rápido que los marcos ASGI comparables.
Puede ver y ejecutar los puntos de referencia aquí, o leer más al respecto aquí en nuestra documentación.
Litestar está abierto a contribuciones grandes y pequeñas. Siempre puedes unirte a nuestro servidor de Discord o unirte a nuestro espacio Matrix para discutir las contribuciones y el mantenimiento del proyecto. Para obtener pautas sobre cómo contribuir, consulte la guía de contribuciones.
Na'aman Hirschfeld ? | Peter Schutt ? | Ashwin Vinod | Damián | Vicente Sarago | Jonas Krüger Svensson ? | Sondre Lillebø Gundersen ? |
Lev ? | Tim Wedde | Tory Clasen | Arseniy Boykov ? | Jacob Rodgers | Dane Solberg | madlad33 |
Mateo Aylward | Jan Klima | C2D | to-ph | imbev | catalin | Seon82 |
Slava | Acosar | Cody Fincher ? | Christian Clauss | josedaniel | devtud ? | nicolas ramos |
seladb | Simon Wienhofer | MobiusXS | Aidan Simard | weber | Samuel Colvin | Mateusz Mikołajczyk |
Alex | Odiseo | Javier Pinilla | chaoing | infohash | Juan Ingles | Eugenio |
jon daly | Harshal Laheri | Téva KRIEF | Konstantin Mijailov ? | michel henry | chbndrhnns | nielsvanhooy ? |
provinciano ? | Josué Bronson | Roman Reznikov | mookrs | Mike De Palatis | Carlos Alberto Pérez-Molano | Piensa rápido |
Cristóbal Krause | Kyle Smith ? | Scott Bradley ? | Srikanth Chekuri | miguel bosch | sssssss340 ? | ste-piscina ? |
Alc-Alc | algo | Garry Bullock | Niclas Haderer | Diego Álvarez | Jason Nance | Igor Kapadze |
Somraj Saha | Magnús Ágúst Skúlason | Alessio Parma | Peter Brunner | café jacob | gamazico | Kareem Mahlees |
Abdulhaq Emhemmed | Jenés | chris-telemetria | Pabellón ? | Esteban Fitzpatrick ? | Eric Kennedy | wassaf shahzad |
Nils Olson ? | Riley Chase | arl ? | Antoine van der Horst | Nick Groenen | Giorgio Vilardo | nicolás bollweg |
Tomas Jonsson | Khiem Doan | kedod | sonpro1296 | Patricio Armengol | lijadora | 疯人院主任 |
aviral-nayya | whiskyriver | Phyo Arkar Lwin | matthewnewland ? | Tom Kuo ? | LeckerenSirupwaffeln ? | Daniel González Fernández. |
01EK98 | Sarbo Roy | ryan seley | Félix ? | George Sakkis | Tuba Hubá | Stefane Fermigier |
r4ge | Arrendajo | sinisaos | Tharuka De Vendra | eur10 ? | Shubham | Erik Hassé ? |
Nikita Sobolev ? | Nguyễn Hoàng Đức ? | RavanaBhrama | Marcel Johannesmann | Mateo | Mattwmaster58 ? | Manuel Sánchez Pinar. |
juan riveros | David Brochart | Sean Donoghue | PC Shyamshankar ? | William Evonosky | geeshta ? | Roberto Rosca |
DICE_Lab | luis san pablo | Pastujov Nikita | James O'Claire | pete | Alexandre Richonnier | betabon |
Dennis Brakhane ? | Pragy Agarwal | Piotr Dybowski | Konrad Szczurek | Jardín Orell | julián | Lee Jay Hsu ? ? |
Michiel W. Beijen | L.Bao | Jarred Glaser | cazador boyd | César Giulietti | Marcos Lim | Henry Zhou ? |
William Stamm | andres hacer | Boseong Choi | Kim Minki | Jeongseop Lim | FergusMok | Manu Singhal |
Jerry Wu | horó ? | Ross Titmarsh | Mike Korneev | patricio neise | Jean-Arhancet ? | Leo Alekseyev |
aranvir | conejito-terapeuta | Ben Luo | Hugo van Kemenade | Michael Gerbig | crisog ? | harry |
James Bennet ? | sorbete | Carl Smedstad | Taein-min | Stanislav Liu. ? | Tibor Reiss | Alex ? |
joren seis | jderrien | PosiblePanda | évstrat ? | Ikko Eltociear Ashimine | Taimur Ibrahim | l-armstrong |
Anuranjan Srivastava | Simón José | Abel Kidanemariam | Recortar21 | Agustín Arce | Farhan Ali Raza | fabianista |
Mohamed Babelly | Carlos Duffy | Evgeny Demchenko | Olzhas Arystanov ? | vikash |
Este proyecto sigue la especificación de todos los contribuyentes. ¡Se aceptan aportes de cualquier tipo!