Découvrez nos sponsors dans la documentation
Si vous souhaitez soutenir le travail que nous effectuons, envisagez de devenir sponsor via Polar.sh (de préférence), GitHub ou Open Collective.
De plus, exclusivement avec Polar, vous pouvez participer à des parrainages basés sur des promesses de don.
Tout en prenant en charge les gestionnaires de routes basés sur des fonctions, Litestar prend également en charge et promeut la POO python à l'aide de contrôleurs basés sur les classes :
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 rigoureusement typé et impose le typage. Par exemple, si vous oubliez de saisir une valeur de retour pour un gestionnaire de route, une exception sera levée. La raison en est que Litestar utilise des données de saisie pour générer des spécifications OpenAPI, ainsi que pour valider et analyser les données. Ainsi, la saisie est essentielle au framework.
De plus, Litestar permet d'étendre son support à l'aide de plugins.
Litestar dispose d'un système de plugins qui permet à l'utilisateur d'étendre la sérialisation/désérialisation, la génération OpenAPI et d'autres fonctionnalités.
Il est livré avec un plugin intégré pour SQL Alchemy, qui permet à l'utilisateur d'utiliser les classes déclaratives SQLAlchemy "nativement", c'est-à-dire en tant que paramètres de type qui seront sérialisés/désérialisés et de les renvoyer sous forme de valeurs provenant des gestionnaires de routes.
Litestar prend également en charge la création programmatique de DTO avec une classe DTOFactory
, qui prend également en charge l'utilisation de plugins.
Litestar dispose d'une logique personnalisée pour générer le schéma OpenAPI 3.1.0, et inclut la génération facultative d'exemples à l'aide de la bibliothèque polyfactory
.
Litestar sert la documentation du schéma OpenAPI généré avec :
Tous ces éléments sont disponibles et activés par défaut.
Litestar dispose d'un système DI simple mais puissant inspiré de pytest. Vous pouvez définir des dépendances nommées - synchronisées ou asynchrones - à différents niveaux de l'application, puis les utiliser ou les écraser de manière sélective.
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 prend en charge les middlewares ASGI typiques et est livré avec des middlewares pour gérer des éléments tels que
Litestar dispose d'un mécanisme d'autorisation appelé guards
, qui permet à l'utilisateur de définir des fonctions de garde à différents niveaux de l'application (application, routeur, contrôleur, etc.) et de valider la demande avant d'appuyer sur la fonction de gestionnaire de route.
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 prend en charge les hooks de cycle de vie des requêtes, de la même manière que Flask - c'est-à-dire before_request
et after_request
Litestar est rapide. Il est comparable ou nettement plus rapide que les frameworks ASGI comparables.
Vous pouvez voir et exécuter les tests ici, ou en savoir plus ici dans notre documentation.
Litestar est ouvert aux contributions, grandes et petites. Vous pouvez toujours rejoindre notre serveur Discord ou rejoindre notre espace Matrix pour discuter des contributions et de la maintenance du projet. Pour obtenir des directives sur la manière de contribuer, veuillez consulter le guide de contribution.
Naaman Hirschfeld ? | Peter Schutt ? | Ashwin Vinod | Damien | Vincent Sarago | Jonas Krüger Svensson ? | Sondre Lillebo Gundersen ? |
Lév ? | Tim Wedde | Tory Clasen | Arsène Boïkov ? | Jacob Rodgers | Danois Solberg | madlad33 |
Matthieu Aylward | Jan Klima | C2D | à-ph | imbev | catalin | Seon82 |
Slave | Harry | Cody Fincher ? | Clause chrétienne | Joseph Daniel | Devtud ? | Nicolas Ramos |
seladb | Simon Wienhofer | MobiusXS | Aïdan Simard | Weber | Samuel Colvin | Mateusz Mikołajczyk |
Alex | Odiséo | Javier Pinilla | Chaoying | infohash | John Inglés | Eugène |
Jon Daly | Harshal Laheri | Téva KRIEF | Constantin Mikhaïlov ? | Mitchell Henri | chbndrhnns | nielsvanhooy ? |
croûte provinciale ? | Josué Bronson | Romain Reznikov | mookrs | Mike DePalatis | Carlos Alberto Pérez-Molano | PenseVite |
Christophe Krause | Kyle Smith ? | Scott Bradley ? | Srikanth Chekuri | Michel Bosch | sssssss340 ? | Ste-piscine ? |
Alc-Alc | quelque chose | Garry Bullock | Nicolas Haderer | Diego Álvarez | Jason Nance | Igor Kapadzé |
Somraj Saha | Magnús August Skulason | Alessio Parme | Pierre Brunner | Café Jacob | Gamazique | Kareem Mahlee |
Abdulhaq Emhemmed | Jenish | Chris-télémétrie | Salle ? | Stéphane Fitzpatrick ? | Éric Kennedy | Wassaf Shahzad |
Nils Olsson ? | Riley Chase | arl ? | Antoine van der Horst | Nick Groenen | Giorgio Vilardo | Nicolas Bollweg |
Tomas Jonsson | Khiem Doan | Kédod | sonpro1296 | Patrick Armengol | Ponceuse | 疯人院主任 |
aviral-nayya | rivière à whisky | Phyo Arkar Lwin | MatthieuNewland ? | Tom Kuo ? | LeckerenSirupwaffeln ? | Daniel González Fernández |
01EK98 | Sarbo Roy | Ryan Seeley | Félix ? | Georges Sakkis | Huba-tuba | Stéphane Fermigier |
r4ge | Geai | sinisaos | Tharuka Devendra | euri10 ? | Shubham | Érik Hasse ? |
Nikita Sobolev ? | Nguyễn Hoàng Đức ? | RavanaBhrama | Marcel Johannesmann | Matthieu | Mattwmaster58 ? | Manuel Sánchez Pinar |
Juan Riveros | David Brochart | Sean Donoghue | PC Shyamshankar ? | Guillaume Evonosky | geeshta ? | Robert Rosca |
DICE_Laboratoire | Luis San Pablo | Pastoukhov Nikita | James O'Claire | Pierre | Alexandre Richonnier | bêta-bouton |
Denis Brakhane ? | Pragy Agarwal | Piotr Dybowski | Konrad Szczurek | Orell Garten | Julien | Leejay Hsu ? ? |
Michiel W.Beijen | L. Bao | Jarred Glaser | Chasseur Boyd | César Giulietti | Marcus Lim | Henri Zhou ? |
William Stam | Andrew fait | Boseong Choi | Kim Minki | Jeongseop Lim | FergusMok | Manu Singhal |
Jerry Wu | heure ? | Ross Titmarsh | Mike Korneïev | Patrick Neise | Jean Arhancet ? | Léon Alekseïev |
aranvir | lapin-thérapeute | Ben Luo | Hugo van Keménade | Michael Gerbig | CrisOG ? | Harry |
James Bennett ? | sherbang | Carl Smedstad | Taein Min | Stanislav Lyou. ? | Tibor Reiss | Alex ? |
Joren Six | jderrien | PossiblePanda | evstrat ? | Ikko Eltociear Ashimine | Taïmur Ibrahim | l-armstrong |
Anuranjan Srivastava | Simon Joseph | Abel Kidanemariam | Garniture21 | Agustin Arcé | Farhan Ali Raza | Fabien |
Mohammed Babelly | Charles Duffy | Evgueni Demchenko | Oljas Arystanov ? | Vikash |
Ce projet suit la spécification de tous les contributeurs. Les contributions de toute nature sont les bienvenues !