Confira nossos patrocinadores nos documentos
Se você gostaria de apoiar o trabalho que fazemos, considere se tornar um patrocinador via Polar.sh (preferencial), GitHub ou Open Collective.
Além disso, exclusivamente com a Polar, você pode participar de patrocínios baseados em promessas.
Ao mesmo tempo em que oferece suporte a manipuladores de rotas baseados em funções, o Litestar também oferece suporte e promove Python OOP usando controladores baseados em 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 é digitado rigorosamente e impõe digitação. Por exemplo, se você esquecer de digitar um valor de retorno para um manipulador de rota, uma exceção será gerada. A razão para isso é que Litestar usa dados de digitação para gerar especificações OpenAPI, bem como para validar e analisar dados. Assim, a digitação é essencial para o framework.
Além disso, Litestar permite estender seu suporte por meio de plugins.
Litestar possui um sistema de plugins que permite ao usuário estender serialização/desserialização, geração de OpenAPI e outros recursos.
Ele vem com um plugin embutido para SQL Alchemy, que permite ao usuário usar classes declarativas SQLAlchemy "nativamente", ou seja, como parâmetros de tipo que serão serializados/desserializados e retorná-los como valores de manipuladores de rota.
Litestar também suporta a criação programática de DTOs com uma classe DTOFactory
, que também suporta o uso de plugins.
Litestar possui lógica customizada para gerar esquema OpenAPI 3.1.0, inclui geração opcional de exemplos usando a biblioteca polyfactory
.
Litestar fornece a documentação do esquema OpenAPI gerado com:
Todos estes estão disponíveis e habilitados por padrão.
Litestar possui um sistema DI simples, mas poderoso, inspirado no pytest. Você pode definir dependências nomeadas - sincronizadas ou assíncronas - em diferentes níveis do aplicativo e, em seguida, usá-las seletivamente ou substituí-las.
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 suporta middleware ASGI típico e vem com middlewares para lidar com coisas como
Litestar possui um mecanismo de autorização chamado guards
, que permite ao usuário definir funções de guarda em diferentes níveis da aplicação (app, roteador, controlador etc.) e validar a solicitação antes de atingir a função de manipulador de rota.
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 suporta ganchos de ciclo de vida de solicitação, de forma semelhante ao Flask - ou seja, before_request
e after_request
Litestar é rápido. É equivalente ou significativamente mais rápido que estruturas ASGI comparáveis.
Você pode ver e executar os benchmarks aqui ou ler mais sobre isso aqui em nossa documentação.
A Litestar está aberta a contribuições grandes e pequenas. Você sempre pode ingressar em nosso servidor discord ou em nosso espaço Matrix para discutir contribuições e manutenção de projetos. Para obter orientações sobre como contribuir, consulte o guia de contribuições.
Na'aman Hirschfeld ? | Peter Schutt ? | Ashwin Vinod | Damião | Vicente Sarago | Jonas Krüger Svensson ? | Sondre Lillebo Gundersen ? |
Leão ? | Tim Wedde | Tory Clasen | Arseniy Boykov ? | Jacob Rodgers | Dane Solberg | madlad33 |
Matthew Aylward | Jan Clima | C2D | para-ph | imbev | catălin | Seon82 |
Slava | Harry | Cody Fincher ? | Claus cristão | Josepdaniel | devtud ? | Nicolau Ramos |
seladb | Simon Wienhöfer | MobiusXS | Aidan Simard | Weber | Samuel Colvin | Mateusz Mikołajczyk |
Alex | Odiseo | Javier Pinilla | Chaoying | hash de informação | João Inglês | Eugênio |
Jon Daly | Harshal Laheri | Téva KRIEF | Konstantin Mikhailov ? | Mitchell Henry | chbndrhnns | nielsvanhooy ? |
chucrute provincial ? | Josué Bronson | Roman Reznikov | mookrs | Mike De Palatis | Carlos Alberto Pérez Molano | Pensa rápido |
Cristóvão Krause | Kyle Smith ? | Scott Bradley ? | Srikanth Chekuri | Michael Bosch | ssssss340 ? | piscina ? |
Alc-Alc | alguma coisa | Harry Bullock | Niclas Haderer | Diego Álvarez | Jason Nance | Igor Kapadze |
Somraj Saha | Magnús Ágúst Skúlason | Alessio Parma | Pedro Brunner | Café Jacó | Gamásico | Kareem Mahlees |
Abdulhaq Emhemmed | Jenish | Chris-telemetria | Ala ? | Stephan Fitzpatrick ? | Eric Kennedy | Wassaf Shahzad |
Nils Olsson ? | Riley perseguição | arl ? | Antoine van der Horst | Nick Groenen | Giorgio Vilardo | Nicholas Bollweg |
Tomas Jonsson | Khiem Doan | kedod | sonpro1296 | Patrick Armengol | Lixadeira | 疯人院主任 |
aviral-nayya | rio whisky | Phyo Arkar Lwin | Mateus Newland ? | Tom Kuo ? | LeckerenSirupwaffeln ? | Daniel González Fernández |
01EK98 | Sarbo Roy | Ryan Seeley | Félix ? | George Sakkis | Huba Tuba | Stefane Fermigier |
r4ge | Jay | sinisaos | Tharuka Devendra | euri10 ? | Shubham | Erik Hasse ? |
Nikita Sobolev ? | Nguyễn Hoàng Đức ? | RavanaBhrama | Marcel Johannesmann | Mateus | Mattwmaster58 ? | Manuel Sánchez Pinar |
Juan Riveros | David Brochart | Sean Donoghue | PC Shyamshankar ? | William Evonosky | geeshta ? | Roberto Rosca |
DICE_Lab | Luís São Paulo | Pastukhov Nikita | James O'Claire | Pete | Alexandre Richonnier | betaboon |
Dennis Brakhane ? | Pragy Agarwal | Piotr Dybowski | Konrad Szczurek | Orell Jardim | Julien | Lee Jay Hsu ? ? |
Michiel W. Beijen | L. Bao | Glaser Jarred | Caçador Boyd | César Giulietti | Marco Lim | Henry Zhou ? |
William Stam | André faz | Boseong Choi | Kim Minki | Jeongseop Lim | Fergus Mok | Manu Singhal |
Jerry Wu | horro ? | Ross Titmarsh | Mike Korneev | Patrick Neise | Jean Arhancet ? | Leo Alekseyev |
aranvir | terapeuta de coelhos | Ben Luo | Hugo van Kemenade | Michael Gerbig | CrisOG ? | Harry |
James Bennet ? | sherbang | Carl Smedstad | Taein Min | Stanislav Liu. ? | Tibor Reiss | Alex ? |
Joren Seis | jderrien | PossívelPanda | evstrat ? | Ikko Eltociear Ashimine | Taimur Ibrahim | eu-armstrong |
Anuranjano Srivastava | Simão José | Abel Kidanemariam | Aparar21 | Agustín Arce | Farhan Ali Raza | Fabiano |
Maomé Babelly | Charles Duffy | Evgeny Demchenko | Olzhas Arystanov ? | Vikash |
Este projeto segue a especificação de todos os contribuidores. Contribuições de qualquer tipo são bem-vindas!