在文档中查看我们的赞助商
如果您想支持我们所做的工作,请考虑通过 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 | 奥古斯丁·阿尔塞 | 法尔汗·阿里·拉扎 | 法比安 |
穆罕默德·巴贝利 | 查尔斯·达菲 | 叶夫根尼·德姆琴科 | 奥尔扎斯·阿里斯塔诺夫 ? | 维卡什 |
该项目遵循所有贡献者规范。欢迎任何形式的贡献!