Ознакомьтесь с нашими спонсорами в документации
Если вы хотите поддержать нашу работу, рассмотрите возможность стать спонсором через Polar.sh (предпочтительно), GitHub или Open Collective.
Кроме того, исключительно с помощью Polar вы можете участвовать в спонсорстве на основе залога.
Поддерживая обработчики маршрутов на основе функций, Litestar также поддерживает и продвигает ООП Python с использованием контроллеров на основе классов:
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 также поддерживает программное создание DTO с помощью класса DTOFactory
, который также поддерживает использование плагинов.
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
Litestar работает быстро. Он находится на одном уровне или значительно быстрее, чем сопоставимые платформы ASGI.
Вы можете просмотреть и запустить тесты здесь или прочитать больше об этом в нашей документации.
Litestar открыт для больших и малых взносов. Вы всегда можете присоединиться к нашему серверу Discord или присоединиться к нашему пространству Matrix, чтобы обсудить вклад и поддержку проекта. Рекомендации о том, как внести свой вклад, см. в руководстве по вкладам.
Нааман Хиршфельд ? | Питер Шатт ? | Эшвин Винод | Дамиан | Винсент Сараго | Йонас Крюгер Свенссон ? | Сондре Лиллебё Гундерсен ? |
Лев ? | Тим Ведде | Тори Класен | Арсений Бойков ? | Джейкоб Роджерс | Дэйн Сольберг | madlad33 |
Мэтью Эйлуорд | Ян Клима | C2D | to-ph | имбев | Каталин | Сеон82 |
Слава | Гарри | Коди Финчер ? | Кристиан Клаусс | Жозепданиэль | Девтуд ? | Николас Рамос |
Селадб | Саймон Винхёфер | МобиусXS | Эйдан Симард | Вебер | Сэмюэл Колвин | Матеуш Миколайчик |
Алекс | Одисео | Хавьер Пинилья | Чаоин | инфохэш | Джон Инглес | Евгений |
Джон Дэйли | Харшал Лахери | Тева КРИФ | Константин Михайлов ? | Митчелл Генри | чбндрннс | Нильсванхой ? |
провинцкапуста ? | Джошуа Бронсон | Роман Резников | мукеры | Майк ДеПалатис | Карлос Альберто Перес-Молано | ДумаетБыстро |
Кристофер Краузе | Кайл Смит ? | Скотт Брэдли ? | Шрикант Чекури | Майкл Бош | ссссссс340 ? | сте-бассейн ? |
Алк-Алк | что-то | Гарри Буллок | Никлас Хадерер | Диего Альварес | Джейсон Нэнс | Игорь Кападзе |
Сомрадж Саха | Магнус Агуст Скуласон | Алессио Парма | Питер Бруннер | Джейкоб Кофе | Гамазич | Карим Малис |
Абдулхак Эмхеммед | Джениш | Крис-телеметрия | Сторожить ? | Стефан Фицпатрик ? | Эрик Кеннеди | Вассаф Шахзад |
Нильс Олссон ? | Райли Чейз | эрл ? | Антуан ван дер Хорст | Ник Гроенен | Джорджо Вилардо | Николас Боллвег |
Томас Йонссон | Кхием Доан | Кедод | сынpro1296 | Патрик Арменгол | Сандер | 疯人院主任 |
авирал-найя | вискирека | Пьо Аркар Лвин | Мэтью Ньюленд ? | Том Куо ? | ЛекеренСиропваффельн ? | Даниэль Гонсалес Фернандес |
01ЕК98 | Сарбо Рой | Райан Сили | Феликс ? | Джордж Саккис | Хуба Туба | Стефан Фермижье |
r4ge | Джей | синисаос | Тарука Девендра | 10 евро ? | Шубхам | Эрик Хассе ? |
Никита Соболев ? | Нгуен Хоанг Дык ? | РаванаБхрама | Марсель Йоханнесманн | Мэтью | Mattwmaster58 ? | Мануэль Санчес Пинар |
Хуан Риверос | Дэвид Брошар | Шон Донохью | ПК Шьямшанкар ? | Уильям Эвоноски | гешта ? | Роберт Роска |
DICE_Lab | Луис Сан Пабло | Пастухов Никита | Джеймс О'Клер | Пит | Александр Ришонье | бетабун |
Деннис Брэхан ? | Праги Агарвал | Петр Дыбовский | Конрад Щурек | Орелл Гартен | Жюльен | Лиджей Сюй ? ? |
Мишель В. Бейен | Л. Бао | Джаред Глейзер | Хантер Бойд | Сезар Джульетти | Маркус Лим | Генри Чжоу ? |
Уильям Стэм | Эндрю, делай | Посон Чой | Ким Минки | Чон Соп Лим | ФергусМок | Ману Сингхал |
Джерри Ву | хоро ? | Росс Титмарш | Майк Корнеев | Патрик Нейз | Жан Архансе ? | Лев Алексеев |
аранвир | кролик-терапевт | Бен Луо | Хьюго ван Кеменаде | Майкл Гербиг | КрисОГ ? | Гаррил |
Джеймс Беннетт ? | шербанг | Карл Смедстад | Тэин Мин | Станислав Лю. ? | Тибор Рейсс | Алекс ? |
Йорен Сикс | Дждерриен | ВозможноПанда | евстрат ? | Икко Элтосиар Ашимине | Таймур Ибрагим | л-армстронг |
Ануранджан Шривастава | Саймон Джозеф | Абель Киданемариам | Трим21 | Агустин Арсе | Фархан Али Раза | Фабиан |
Мохаммед Бабелли | Чарльз Даффи | Евгений Демченко | Олжас Арыстанов ? | Викаш |
Этот проект соответствует спецификации всех участников. Любой вклад приветствуется!