ドキュメントでスポンサーを確認してください
私たちの活動をサポートしたい場合は、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 は、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 スペースに参加して、貢献やプロジェクトのメンテナンスについて話し合うことができます。貢献方法のガイドラインについては、貢献ガイドをご覧ください。
ナアマン・ヒルシュフェルト ? | ピーター・シャット ? | アシュウィン・ヴィノッド | ダミアン | ヴィンセント・サラゴ | ジョナス・クルーガー・スヴェンソン ? | ソンドレ・リレボ・グンダーセン ? |
レブ ? | ティム・ウェッデ | トリー・クラセン | アーセニー・ボイコフ ? | ジェイコブ・ロジャース | デーン・ソルバーグ | マドラッド33 |
マシュー・エイルワード | ヤン・クリマ | C2D | とーふ | インベブ | カタリン | ソン82 |
スラヴァ | ハリー | コーディ・フィンチャー ? | クリスチャン・クラウス | ジョセプダニエル | デブトゥド ? | ニコラス・ラモス |
セラドブ | シモン・ウィーンホーファー | メビウスXS | エイダン・シマード | ウェバー | サミュエル・コルビン | マテウシュ・ミコワイク |
アレックス | オディセオ | ハビエル・ピニージャ | 朝営 | 情報ハッシュ | ジョン・イングルス | ユージーン |
ジョン・デイリー | ハーシャル・ラヘリ | テバ・クリーフ | コンスタンチン・ミハイロフ ? | ミッチェル・ヘンリー | chbndrhnns | ニールスヴァンフーイ ? |
プロビンツクラウト ? | ジョシュア・ブロンソン | ロマン・レズニコフ | ムックル | マイク・デパラティス | カルロス・アルベルト・ペレス・モラノ | 思考が速い |
クリストファー・クラウス | カイル・スミス ? | スコット・ブラッドリー ? | シュリカンス・チェクリ | マイケル・ボッシュ | ssssss340 ? | ステプール ? |
アルク-アルク | 何か | ゲイリー・ブロック | ニクラス・ハデラー | ディエゴ・アルバレス | ジェイソン・ナンス | イーゴリ・カパゼ |
ソムラジ・サハ | マグナス・アグスト・スクーラソン | アレッシオ・パルマ | ピーター・ブルナー | ジェイコブコーヒー | ガマジック | カリーム・マーリース |
アブドゥルハク・エムヘメド | ジェニッシュ | クリステレメトリー | 区 ? | ステファン・フィッツパトリック ? | エリック・ケネディ | ワサフ・シャザード |
ニルス・オルソン ? | ライリー・チェイス | アール ? | アントワーヌ・ファン・デル・ホルスト | ニック・グレーネン | ジョルジョ・ビラルド | ニコラス・ボルウェグ |
トーマス・ヨンソン | キエム・ドアン | ケド | ソンプロ1296 | パトリック・アルメンゴル | サンダー | 疯人院主任 |
アビラル・ナヤ | ウィスキーリバー | ピオ・アーカール・ルウィン | マシュー・ニューランド ? | トム・クオ ? | レッケレンシロップワッフェルン ? | ダニエル・ゴンサレス・フェルナンデス |
01EK98 | サーボ・ロイ | ライアン・シーリー | フェリックス ? | ジョージ・サキス | フバチューバ | ステファン・フェルミジェ |
r4ge | ジェイ | シニサオス | タルカ・デヴェンドラ | ユーロ10 ? | シャバム | エリック・ハッセ ? |
ニキータ・ソボレフ ? | グエン・ホアン・ドゥク ? | ラーヴァナブラマ | マルセル・ヨハネスマン | マシュー | マトウマスター58 ? | マヌエル・サンチェス・ピナール |
フアン・リベロス | デビッド・ブロチャート | ショーン・ドナヒュー | PC シャムシャンカール ? | ウィリアム・エボノスキー | ギーシュタ ? | ロバート・ロスカ |
DICE_ラボ | ルイス・サン・パブロ | パストゥホフ・ニキータ | ジェームズ・オクレア | ピート | アレクサンドル・リショニエ | ベタブーン |
デニス・ブラケイン ? | プラギ・アガルワル | ピョートル・ディボウスキー | コンラート・シュチュレク | オレル・ガーテン | ジュリアン | リージェイ・スー ? ? |
ミシェル・W・ベイジェン | L・バオ | ジャレッド・グレイザー | ハンター・ボイド | セザール・ジュリエッティ | マーカス・リム | ヘンリー・チョウ ? |
ウィリアム・スタム | アンドリュー・ドゥ | チェ・ボソン | キム・ミンギ | イム・ジョンソプ | ファーガスモク | マヌ・シンハル |
ジェリー・ウー | ホロ ? | ロス・ティットマーシュ | マイク・コルネエフ | パトリック・ナイセ | ジャン・アルハンセ ? | レオ・アレクセーエフ |
アランビル | バニーセラピスト | ベン・ルオ | ウーゴ・ヴァン・ケメナーデ | マイケル・ガービッグ | クリスOG ? | ハリル |
ジェームズ・ベネット ? | シャーバン | カール・スメドスタッド | テイン・ミン | スタニスラフ・リュー。 ? | ティボール・リース | アレックス ? |
ジョレン・シックス | ジェデリーン | ポッシブルパンダ | エスストラト ? | 一光エルトシアール・アシミネ | タイムル・イブラヒム | l-アームストロング |
アヌランジャン・スリヴァスタヴァ | サイモン・ジョセフ | アベル・キダネマリアム | トリム21 | アグスティン・アルセ | ファルハン・アリ・ラザ | ファビアン |
モハメッド・バベリー | チャールズ・ダフィー | エフゲニー・デムチェンコ | オルジャス・アリスタノフ ? | ヴィカシュ |
このプロジェクトは、全員参加者の仕様に従っています。あらゆる種類の貢献を歓迎します!