Schauen Sie sich unsere Sponsoren in den Dokumenten an
Wenn Sie unsere Arbeit unterstützen möchten, denken Sie bitte darüber nach, Sponsor über Polar.sh (bevorzugt), GitHub oder Open Collective zu werden.
Exklusiv bei Polar können Sie sich auch an verpfändungsbasierten Sponsoringaktivitäten beteiligen.
Während Litestar funktionsbasierte Routenhandler unterstützt und fördert, unterstützt und fördert es auch Python OOP mithilfe klassenbasierter Controller:
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 ist streng typisiert und erzwingt die Eingabe. Wenn Sie beispielsweise vergessen, einen Rückgabewert für einen Routenhandler einzugeben, wird eine Ausnahme ausgelöst. Der Grund dafür ist, dass Litestar Tippdaten zur Generierung von OpenAPI-Spezifikationen sowie zur Validierung und Analyse von Daten verwendet. Daher ist das Tippen für das Framework von wesentlicher Bedeutung.
Darüber hinaus ermöglicht Litestar die Erweiterung seines Supports durch Plugins.
Litestar verfügt über ein Plugin-System, das es dem Benutzer ermöglicht, Serialisierung/Deserialisierung, OpenAPI-Generierung und andere Funktionen zu erweitern.
Es wird mit einem integrierten Plugin für SQL Alchemy geliefert, das es dem Benutzer ermöglicht, deklarative Klassen von SQLAlchemy „nativ“ zu verwenden, d. h. als Typparameter, die serialisiert/deserialisiert werden, und sie als Werte von Routenhandlern zurückzugeben.
Litestar unterstützt außerdem die programmgesteuerte Erstellung von DTOs mit einer DTOFactory
-Klasse, die auch die Verwendung von Plugins unterstützt.
Litestar verfügt über eine benutzerdefinierte Logik zum Generieren des OpenAPI 3.1.0-Schemas, einschließlich der optionalen Generierung von Beispielen mithilfe der polyfactory
-Bibliothek.
Litestar stellt die Dokumentation aus dem generierten OpenAPI-Schema bereit mit:
All dies ist standardmäßig verfügbar und aktiviert.
Litestar verfügt über ein einfaches, aber leistungsstarkes DI-System, das von Pytest inspiriert ist. Sie können benannte Abhängigkeiten – synchron oder asynchron – auf verschiedenen Ebenen der Anwendung definieren und diese dann selektiv verwenden oder überschreiben.
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 unterstützt typische ASGI-Middleware und wird mit Middleware ausgeliefert, um Dinge wie zu handhaben
Litestar verfügt über einen Autorisierungsmechanismus namens guards
, der es dem Benutzer ermöglicht, Schutzfunktionen auf verschiedenen Ebenen der Anwendung (App, Router, Controller usw.) zu definieren und die Anfrage zu validieren, bevor er auf die Route-Handler-Funktion stößt.
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 unterstützt Request-Life-Cycle-Hooks, ähnlich wie Flask – also before_request
und after_request
Litestar ist schnell. Es ist vergleichbaren ASGI-Frameworks ebenbürtig oder deutlich schneller als diese.
Sie können die Benchmarks hier ansehen und ausführen oder hier in unserer Dokumentation mehr darüber lesen.
Litestar ist offen für große und kleine Beiträge. Sie können jederzeit unserem Discord-Server oder unserem Matrix-Bereich beitreten, um Beiträge und Projektpflege zu besprechen. Richtlinien zum Spenden finden Sie im Beitragsleitfaden.
Na'aman Hirschfeld ? | Peter Schutt ? | Ashwin Vinod | Damian | Vincent Sarago | Jonas Krüger Svensson ? | Sondre Lillebø Gundersen ? |
Lev ? | Tim Wedde | Tory Clasen | Arseny Boykov ? | Jacob Rodgers | Däne Solberg | madlad33 |
Matthew Aylward | Jan Klima | C2D | to-ph | imbev | cătălin | Seon82 |
Slawa | Harry | Cody Fincher ? | Christian Clauss | josepdaniel | devtud ? | Nicholas Ramos |
seladb | Simon Wienhöfer | MobiusXS | Aidan Simard | wweber | Samuel Colvin | Mateusz Mikołajczyk |
Alex | Odiseo | Javier Pinilla | Chaoying | Infohash | John Ingles | Eugen |
Jon Daly | Harshal Laheri | Téva KRIEF | Konstantin Michailow ? | Mitchell Henry | chbndrhnns | nielsvanhooy ? |
Provinzkraut ? | Joshua Bronson | Roman Reznikov | mookrs | Mike DePalatis | Carlos Alberto Pérez-Molano | ThinksFast |
Christoph Krause | Kyle Smith ? | Scott Bradley ? | Srikanth Chekuri | Michael Bosch | sssssss340 ? | Ste-Pool ? |
Alc-Alc | etwas | Garry Bullock | Niclas Haderer | Diego Alvarez | Jason Nance | Igor Kapadze |
Somraj Saha | Magnús Ágúst Skúlason | Alessio Parma | Peter Brunner | Jacob Kaffee | Gamazic | Kareem Mahlees |
Abdulhaq Emhemmed | Jenish | Chris-Telemetrie | Station ? | Stephan Fitzpatrick ? | Eric Kennedy | Wassaf Shahzad |
Nils Olsson ? | Riley Chase | arl ? | Antoine van der Horst | Nick Groenen | Giorgio Vilardo | Nicholas Bollweg |
Tomas Jonsson | Khiem Doan | kedod | sonpro1296 | Patrick Armengol | Sander | 疯人院主任 |
aviral-nayya | Whiskey-Fluss | Phyo Arkar Lwin | MatthewNewland ? | Tom Kuo ? | LeckerenSirupwaffeln ? | Daniel González Fernández |
01EK98 | Sarbo Roy | Ryan Seeley | Felix ? | George Sakkis | Huba Tuba | Stefane Fermigier |
r4ge | Jay | sinisaos | Tharuka Devendra | 10 EUR ? | Shubham | Erik Hasse ? |
Nikita Sobolev ? | Nguyễn Hoàng Đức ? | RavanaBhrama | Marcel Johannesmann | Matthäus | Mattwmaster58 ? | Manuel Sánchez Pinar |
Juan Riveros | David Brochart | Sean Donoghue | PC Shyamshankar ? | William Evonosky | Geeshta ? | Robert Rosca |
DICE_Lab | Luis San Pablo | Pastuchow Nikita | James O'Claire | Pete | Alexandre Richonnier | Betaboon |
Dennis Brakhane ? | Pragy Agarwal | Piotr Dybowski | Konrad Szczurek | Orell Garten | Julien | Leejay Hsu ? ? |
Michiel W. Beijen | L. Bao | Jarred Glaser | Hunter Boyd | César Giulietti | Marcus Lim | Henry Zhou ? |
William Stam | Andrew tut es | Boseong Choi | Kim Minki | Jeongseop Lim | FergusMok | Manu Singhal |
Jerry Wu | horo ? | Ross Titmarsh | Mike Korneev | Patrick Neise | Jean Arhancet ? | Leo Alexejew |
Aranvir | Hasentherapeut | Ben Luo | Hugo van Kemenade | Michael Gerbig | CrisOG ? | Harry |
James Bennett ? | Sherbang | Carl Smedstad | Taein Min | Stanislav Lyu. ? | Tibor Reiss | Alex ? |
Joren Six | jderrien | Möglicher Panda | evstrat ? | Ikko Eltociear Ashimine | Taimur Ibrahim | l-armstrong |
Anuranjan Srivastava | Simon Joseph | Abel Kidanemariam | Trim21 | Agustin Arce | Farhan Ali Raza | Fabian |
Mohammed Babely | Charles Duffy | Jewgeni Demtschenko | Olzhas Arystanov ? | Vikash |
Dieses Projekt folgt der All-Contributors-Spezifikation. Beiträge jeglicher Art willkommen!