문서에서 스폰서를 확인하세요
우리가 하는 작업을 지원하고 싶다면 Polar.sh(선호), GitHub 또는 Open Collective를 통해 후원자가 되는 것을 고려해 보세요.
또한 Polar에서만 독점적으로 서약 기반 후원에 참여할 수 있습니다.
함수 기반 경로 핸들러를 지원하는 동시에 Litestar는 클래스 기반 컨트롤러를 사용하여 Python OOP도 지원하고 홍보합니다.
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는 엄격하게 입력되었으며 입력을 강제합니다. 예를 들어, 경로 처리기의 반환 값을 입력하는 것을 잊은 경우 예외가 발생합니다. 그 이유는 Litestar가 입력 데이터를 사용하여 OpenAPI 사양을 생성하고 데이터를 검증하고 구문 분석하기 때문입니다. 따라서 타이핑은 프레임워크에 필수적입니다.
또한 Litestar는 플러그인을 사용하여 지원을 확장할 수 있습니다.
Litestar에는 사용자가 직렬화/역직렬화, OpenAPI 생성 및 기타 기능을 확장할 수 있는 플러그인 시스템이 있습니다.
이는 사용자가 SQLAlchemy 선언적 클래스를 "기본적으로" 직렬화/역직렬화할 유형 매개변수로 사용하고 이를 경로 핸들러에서 값으로 반환할 수 있도록 하는 SQL Alchemy용 내장 플러그인과 함께 제공됩니다.
Litestar는 또한 플러그인 사용도 지원하는 DTOFactory
클래스를 사용하여 프로그래밍 방식으로 DTO 생성을 지원합니다.
Litestar에는 OpenAPI 3.1.0 스키마를 생성하는 사용자 정의 논리가 있으며, polyfactory
라이브러리를 사용하여 선택적 예제 생성을 포함합니다.
Litestar는 다음을 통해 생성된 OpenAPI 스키마의 문서를 제공합니다.
이 모든 기능은 기본적으로 사용 가능하며 활성화되어 있습니다.
Litestar는 pytest에서 영감을 받은 간단하지만 강력한 DI 시스템을 갖추고 있습니다. 애플리케이션의 다양한 수준에서 명명된 종속성(동기 또는 비동기)을 정의한 다음 선택적으로 사용하거나 덮어쓸 수 있습니다.
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는 일반적인 ASGI 미들웨어를 지원하며 다음과 같은 작업을 처리하기 위해 미들웨어와 함께 제공됩니다.
Litestar에는 사용자가 애플리케이션(앱, 라우터, 컨트롤러 등)의 다양한 수준에서 보호 기능을 정의하고 경로 핸들러 기능을 실행하기 전에 요청의 유효성을 검사할 수 있는 guards
라는 인증 메커니즘이 있습니다.
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는 Flask와 유사하게 요청 수명 주기 후크를 지원합니다(예: before_request
및 after_request
라이트스타는 빠릅니다. 이는 유사한 ASGI 프레임워크와 동등하거나 훨씬 빠릅니다.
여기에서 벤치마크를 보고 실행하거나 여기 설명서에서 자세한 내용을 읽어볼 수 있습니다.
Litestar는 크고 작은 기여에 열려 있습니다. 언제든지 Discord 서버에 가입하거나 Matrix 공간에 가입하여 기여 및 프로젝트 유지 관리에 대해 논의할 수 있습니다. 기여 방법에 대한 지침은 기여 가이드를 참조하세요.
나아만 히르슈펠트 ? | 피터 슈트 ? | 애쉬윈 비노드 | 데미안 | 빈센트 사라고 | 요나스 크루거 스벤손 ? | 손드레 릴레보 군데르센 ? |
레프 ? | 팀 웨데 | 토리 클라센 | 아르세니 보이코프 ? | 제이콥 로저스 | 데인 솔버그 | madlad33 |
매튜 아일워드 | 얀 클리마 | C2D | to-ph | 임베브 | 카탈린 | 선82 |
슬라바 | 괴롭히다 | 코디 핀처 ? | 기독교절 | 조셉다니엘 | 데브튜드 ? | 니콜라스 라모스 |
셀라드브 | 사이먼 빈회퍼 | MobiusXS | 에이단 시마드 | 웨버 | 사무엘 콜빈 | 마테우스 미코와이치크 |
알렉스 | 오디세오 | 하비에르 피닐라 | 차오잉 | 인포해시 | 존 잉글스 | 유진 |
존 달리 | 하샬 라헤리 | 테바 크리프 | 콘스탄틴 미하일로프 ? | 미첼 헨리 | chbndrhnns | 닐스반후이 ? |
프로빈츠크라우트 ? | 조슈아 브론슨 | 로만 레즈니코프 | 무커스 | 마이크 드팔라티스 | 카를로스 알베르토 페레즈-몰라노 | 빠르게 생각하다 |
크리스토퍼 크라우스 | 카일 스미스 ? | 스캇 브래들리 ? | 스리칸트 체쿠리 | 마이클 보쉬 | 으아아아아아아아아아아아아아아아아아아아아아 ? | 스티 풀 ? |
Alc-Alc | 뭔가 | 게리 블록 | 니클라스 하데러 | 디에고 알바레즈 | 제이슨 낸스 | 이고르 카파제 |
솜라지 사하 | 마그누스 아구스트 스쿨라손 | 알레시오 파르마 | 피터 브루너 | 제이콥커피 | 감마지치 | 카림 말리스 |
압둘하크 에헴메드 | 제니쉬 | 크리스 원격 측정 | 구 ? | 스테판 피츠패트릭 ? | 에릭 케네디 | 와사프 샤자드 |
닐스 올슨 ? | 라일리 체이스 | 백작 ? | 앙투안 반 데르 호르스트 | 닉 그로넨 | 조르지오 빌라르도 | 니콜라스 볼웨그 |
토마스 존슨 | 키엠도안 | 케도드 | sonpro1296 | 패트릭 아르멘골 | 샌더 | 疯人院主任 |
aviral-nayya | 위스키강 | 표 아르카르 린 | 매튜뉴랜드 ? | 톰 쿠오 ? | Leckeren시럽와플렌 ? | 다니엘 곤잘레스 페르난데스 |
01EK98 | 사르보 로이 | 라이언 실리 | 펠릭스 ? | 조지 사키스 | 후바 튜바 | 스테판 페르미지에 |
r4ge | 어치 | 시니사오스 | 타루카 데벤드라 | euri10 ? | 슈밤 | 에릭 하세 ? |
니키타 소볼레프 ? | 응웬호앙득 ? | 라바나브라마 | 마르셀 요하네스만 | 매튜 | Mattwmaster58 ? | 마누엘 산체스 피나르 |
후안 리베로스 | 데이비드 브로차트 | 션 도노휴 | PC Shyamshankar ? | 윌리엄 에보노스키 | 게스타 ? | 로버트 로스카 |
DICE_Lab | 루이스 산 파블로 | 파스투호프 니키타 | 제임스 오클레어 | 피트 | 알렉상드르 리쇼니에 | 베타분 |
데니스 브래케인 ? | 프라지 아가르왈 | 표트르 디보프스키 | 콘라드 슈추레크 | 오렐 가르텐 | 줄리앙 | 리제이 수 ? ? |
미치엘 W. 베이젠 | L. 바오 | 자레드 글레이저 | 헌터 보이드 | 세자르 줄리에티 | 마커스 림 | 헨리 저우 ? |
윌리엄 스탬 | 앤드류는 | 최보성 | 김민기 | 임정섭 | 퍼거스목 | 마누 싱할 |
제리 우 | 호로 ? | 로스 티트마쉬 | 마이크 코르니예프 | 패트릭 나이스 | 장 아항셋 ? | 레오 알렉세예프 |
아란비르 | 토끼 치료사 | 벤 루오 | 휴고 반 케메나데 | 마이클 거빅 | 크리스OG ? | 해리 |
제임스 베넷 ? | 셔뱅 | 칼 스메스타드 | 민태인 | 스타니슬라프 류. ? | 티보 리스 | 알렉스 ? |
조렌 식스 | 제리엔 | 가능판다 | evstrat ? | 엘토시에아르 아시미네 잇코 | 타이무르 이브라힘 | 난-암스트롱 |
아누란잔 스리바스타바 | 사이먼 조셉 | 아벨 키다네마리암 | 트림21 | 어거스틴 아르세 | 파르한 알리 라자 | 파비안 |
모하메드 바벨리 | 찰스 더피 | 예브게니 뎀첸코 | 올자스 아리스타노프 ? | 비카시 |
이 프로젝트는 모든 기여자 사양을 따릅니다. 어떤 종류의 기여도 환영합니다!