在文件中查看我們的贊助商
如果您想支持我們所做的工作,請考慮透過 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 生成和其他功能。
它附帶了 SQL Alchemy 的內建插件,允許使用者「本地」使用 SQLAlchemy 聲明類,即作為將被序列化/反序列化的類型參數,並將它們作為路由處理程序的值傳回。
Litestar 也支援使用DTOFactory
類別以程式設計方式建立 DTO,該類別也支援使用外掛程式。
Litestar 具有產生 OpenAPI 3.1.0 模式的自訂邏輯,包括使用polyfactory
庫可選生成範例。
Litestar 透過產生的 OpenAPI 模式提供文件:
所有這些均可用並預設啟用。
Litestar 有一個簡單但功能強大的 DI 系統,其靈感來自 pytest。您可以在應用程式的不同層級定義命名依賴項(同步或非同步),然後選擇性地使用或覆寫它們。
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 空間來討論貢獻和專案維護。有關如何貢獻的指南,請參閱貢獻指南。
納曼·赫希菲爾德 ? | 彼得舒特 ? | 阿什溫·維諾德 | 達米安 | 文森·薩拉戈 | 喬納斯·克魯格·斯文森 ? | 桑德雷·利勒博·岡德森 ? |
列弗 ? | 提姆韋德 | 托里·克拉森 | 阿爾謝尼·博伊科夫 ? | 雅各·羅傑斯 | 戴恩·索爾伯格 | 瘋狂33 |
馬修·艾爾沃德 | 簡·克利馬 | C2D | to-ph | 因貝夫 | 克特林 | 善82 |
斯拉瓦 | 哈利 | 科迪·芬奇 ? | 克里斯蒂安·克勞斯 | 約瑟夫丹尼爾 | 德夫圖德 ? | 尼古拉斯·拉莫斯 |
獅子山 | 西蒙‧維恩霍夫 | 莫比烏斯XS | 艾丹·西馬德 | 韋伯 | 塞繆爾·科爾文 | 馬特烏什·米科瓦伊奇克 |
亞歷克斯 | 奧迪塞奧 | 哈維爾·皮尼拉 | 超英 | 資訊散列 | 約翰·英格爾斯 | 尤金 |
喬恩戴利 | 哈沙爾·拉赫里 | 梯瓦克里夫 | 康斯坦丁·米哈伊洛夫 ? | 米切爾·亨利 | 病原菌 | 尼爾斯萬胡伊 ? |
克勞特省 ? | 約書亞·布朗森 | 羅曼·雷茲尼科夫 | 穆克爾斯 | 麥克·德帕拉蒂斯 | 卡洛斯·阿爾貝托·佩雷斯·莫拉諾 | 快速思考 |
克里斯多福·克勞斯 | 凱爾史密斯 ? | 史考特·布拉德利 ? | 斯里坎特·切庫裡 | 邁克爾·博斯 | sssssss340 ? | 斯特普爾 ? |
鋁酸鋁 | 某件事 | 加里·布洛克 | 尼古拉斯·哈德勒 | 迭戈·阿爾瓦雷斯 | 賈森·南斯 | 伊戈爾·卡帕澤 |
索姆拉吉·薩哈 | 馬格努斯·阿古斯特·斯庫拉森 | 阿萊西奧·帕爾馬 | 彼得布倫納 | 雅各咖啡 | 加馬齊奇 | 卡里姆·馬里斯 |
阿卜杜勒哈克·艾哈邁德 | 傑尼什 | 克里斯遙測 | 沃德 ? | 史蒂芬·菲茨帕特里克 ? | 埃里克·甘迺迪 | 瓦薩夫·沙赫扎德 |
尼爾斯·奧爾森 ? | 萊利·蔡斯 | 阿爾 ? | 安托萬范德霍斯特 | 尼克·格羅寧 | 喬治·維拉多 | 尼古拉斯·博爾韋格 |
托馬斯·瓊森 | 謙都安 | 克多德 | 子Pro1296 | 派崔克·阿門戈爾 | 桑德爾 | 瘋人院院長 |
阿維拉爾納亞 | 威士忌河 | 菲奧·阿卡·倫 | 馬修紐蘭 ? | 郭湯姆 ? | 萊克倫糖漿華夫餅 ? | 丹尼爾·岡薩雷斯·費爾南德斯 |
01EK98 | 薩博·羅伊 | 瑞安·西利 | 菲利克斯 ? | 喬治·薩基斯 | 胡巴大號 | 斯特凡·費米吉爾 |
r4ge | 傑伊 | 西尼索斯 | 塔魯卡·德文德拉 | 歐元10 ? | 舒巴姆 | 艾瑞克·哈塞 ? |
尼基塔·索博列夫 ? | 阮黃德 ? | 羅波那婆羅摩 | 馬塞爾約翰內斯曼 | 馬修 | 馬特馬斯特58 ? | 曼努埃爾·桑切斯·皮納爾 |
胡安·裡韋羅斯 | 大衛·布羅查特 | 肖恩·多諾霍 | PC夏姆香卡 ? | 威廉·埃沃諾斯基 | 吉什塔 ? | 羅伯特·羅斯卡 |
DICE_實驗室 | 路易聖巴勃羅 | 尼基塔·帕斯圖霍夫 | 詹姆斯·奧克萊爾 | 皮特 | 亞歷山大·裡喬尼爾 | 貝塔布恩 |
丹尼斯·布拉坎 ? | 普拉吉·阿加瓦爾 | 皮奧特·迪博夫斯基 | 康拉德·什楚雷克 | 奧雷爾花園 | 朱利安 | 許立傑 ? ? |
米歇爾·W·貝仁 | 包良 | 賈里德·格拉澤 | 亨特·博伊德 | 塞薩爾·朱利埃蒂 | 馬庫斯·林 | 週亨利 ? |
威廉·斯塔姆 | 安德魯杜 | 崔寶成 | 金民基 | 林正燮 | 莫偉雄 | 馬努·辛哈爾 |
吳傑瑞 | 荷羅 ? | 羅斯·蒂特馬什 | 麥克‧科爾尼耶夫 | 派崔克·內斯 | 讓·阿爾朗塞 ? | 列奧·阿列克謝耶夫 |
阿蘭韋 | 兔子治療師 | 羅本 | 烏戈·範·凱梅納德 | 麥可·格比格 | 危機OG ? | 哈里爾 |
詹姆斯貝內特 ? | 謝爾邦 | 卡爾·斯梅斯塔德 | 泰仁民 | 斯坦尼斯拉夫柳. ? | 蒂博·賴斯 | 亞歷克斯 ? |
淨蓮六號 | 傑德林 | 可能的熊貓 | 埃夫斯特拉特 ? | 蘆峰一光 | 泰穆爾·易卜拉欣 | L-阿姆斯特朗 |
阿努蘭詹·斯里瓦斯塔瓦 | 西蒙約瑟夫 | 阿貝爾·基達內馬裡亞姆 | 修剪21 | 奧古斯丁·阿爾塞 | 法爾汗·阿里·拉扎 | 法比安 |
穆罕默德·巴貝利 | 查爾斯·達菲 | 葉夫根尼·德姆琴科 | 奧爾扎斯·阿里斯塔諾夫 ? | 維卡什 |
該項目遵循所有貢獻者規範。歡迎任何形式的貢獻!