Lihat sponsor kami di dokumen
Jika Anda ingin mendukung pekerjaan yang kami lakukan, harap pertimbangkan untuk menjadi sponsor melalui Polar.sh (lebih disukai), GitHub, atau Open Collective.
Selain itu, secara eksklusif dengan Polar, Anda dapat terlibat dalam sponsorship berbasis ikrar.
Sambil mendukung penangan rute berbasis fungsi, Litestar juga mendukung dan mempromosikan python OOP menggunakan pengontrol berbasis kelas:
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 diketik dengan ketat, dan menerapkan pengetikan. Misalnya, jika Anda lupa mengetikkan nilai kembalian untuk pengendali rute, pengecualian akan dimunculkan. Alasannya adalah Litestar menggunakan pengetikan data untuk menghasilkan spesifikasi OpenAPI, serta untuk memvalidasi dan mengurai data. Oleh karena itu, pengetikan sangat penting untuk kerangka kerja tersebut.
Selain itu, Litestar mengizinkan perluasan dukungannya menggunakan plugin.
Litestar memiliki sistem plugin yang memungkinkan pengguna untuk memperluas serialisasi/deserialisasi, pembuatan OpenAPI, dan fitur lainnya.
Ini dikirimkan dengan plugin bawaan untuk SQL Alchemy, yang memungkinkan pengguna untuk menggunakan kelas deklaratif SQLAlchemy "secara asli", yaitu, sebagai parameter tipe yang akan diserialkan/deserialisasi dan mengembalikannya sebagai nilai dari penangan rute.
Litestar juga mendukung pembuatan DTO terprogram dengan kelas DTOFactory
, yang juga mendukung penggunaan plugin.
Litestar memiliki logika khusus untuk menghasilkan skema OpenAPI 3.1.0, termasuk pembuatan contoh opsional menggunakan perpustakaan polyfactory
.
Litestar menyajikan dokumentasi dari skema OpenAPI yang dihasilkan dengan:
Semua ini tersedia dan diaktifkan secara default.
Litestar memiliki sistem DI yang sederhana namun kuat yang terinspirasi oleh pytest. Anda dapat menentukan dependensi bernama - sinkronisasi atau asinkron - pada berbagai tingkat aplikasi, lalu menggunakan atau menimpanya secara selektif.
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 mendukung middleware khas ASGI dan dikirimkan bersama middleware untuk menangani hal-hal seperti
Litestar memiliki mekanisme otorisasi yang disebut guards
, yang memungkinkan pengguna untuk menentukan fungsi penjaga di berbagai tingkat aplikasi (aplikasi, router, pengontrol, dll.) dan memvalidasi permintaan sebelum mencapai fungsi pengendali rute.
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 mendukung hook siklus hidup permintaan, mirip dengan Flask - yaitu before_request
dan after_request
Litestar cepat. Kerangka kerja ini setara atau jauh lebih cepat dibandingkan kerangka kerja ASGI yang sebanding.
Anda dapat melihat dan menjalankan benchmark di sini, atau membaca selengkapnya di sini di dokumentasi kami.
Litestar terbuka untuk kontribusi besar dan kecil. Anda selalu dapat bergabung dengan server perselisihan kami atau bergabung dengan ruang Matrix kami untuk mendiskusikan kontribusi dan pemeliharaan proyek. Untuk pedoman bagaimana berkontribusi, silakan lihat panduan kontribusi.
Na'aman Hirschfeld ? | Peter Schutt ? | Ashwin Vinod | Damian | Vincent Sarago | Jonas Kruger Svensson ? | Sondre Lillebo Gundersen ? |
Lev ? | Tim Wedde | Tory Clasen | Arseny Boykov ? | Yakub Rodgers | Dane Solberg | madlad33 |
Matthew Aylward | Jan Klima | C2D | ke-ph | imbev | katalin | Seon82 |
Kemuliaan | Harry | Cody Fincher ? | Klaus Kristen | josepdaniel | devtud ? | Nicholas Ramos |
seladb | Simon Wienhöfer | MobiusXS | Aidan Simard | weber | Samuel Colvin | Mateusz Mikołajczyk |
Alex | Odiseo | Javier Pinilla | kacau | infohash | John Ingles | Eugene |
Jon Daly | Harshal Laheri | Téva KRIEF | Konstantin Mikhailov ? | Mitchell Henry | chbndrhnns | nielsvanhooy ? |
provinsikraut ? | Joshua Bronson | Roman Reznikov | mookrs | Mike De Palatis | Carlos Alberto Pérez-Molano | Berpikir Cepat |
Christopher Krause | Kyle Smith ? | Scott Bradley ? | Srikanth Chekuri | Michael Bosch | ssssss340 ? | kolam ste ? |
Alc-Alc | sesuatu | Garry Bullock | Nicolas Haderer | Diego Alvarez | Jason Nance | Igor Kapadze |
Somraj Saha | Magnús Agustus Skúlason | Alessio Parma | Peter Brunner | Kopi Yakub | Gamazik | Kareem Mahlees |
Abdulhaq Emhemmed | Jenish | chris-telemetri | Bangsal ? | Stephan Fitzpatrick ? | Eric Kennedy | wassaf syahzad |
Nils Olsson ? | Riley Mengejar | arl ? | Antoine van der Horst | Nick Groenen | Giorgio Vilardo | Nicholas Bollweg |
Tomas Jonsson | Khiem Doan | kedod | sonpro1296 | Patrick Armengol | Sander | 疯人院主任 |
aviral-nayya | sungai wiski | Fio Arkar Lwin | MatthewNewland ? | Tom Kuo ? | LeckerenSirupwaffeln ? | Daniel González Fernández |
01EK98 | Sarbo Roy | Ryan Seeley | Feliks ? | George Sakkis | Huba Tuba | Stefane Fermigier |
r4ge | jay | sinisaos | Tharuka Devendra | euro10 ? | Shubham | Erik Hasse ? |
Nikita Sobolev ? | Nguyễn Hoàng Đức ? | Rahwana Bharama | Marcel Johannesmann | Matius | Mattwmaster58 ? | Manuel Sanchez Pinar |
Juan Riveros | David Brochart | Sean Donoghue | PC Shyamshankar ? | William Evonosky | astaga ? | Robert Rosca |
DICE_Lab | Luis San Pablo | Pastukhov Nikita | James O'Claire | Pete | Alexandre Richonnier | betabon |
Dennis Brakhane ? | Pragy Agarwal | Piotr Dybowski | Konrad Szczurek | Orell Garten | Julien | Leejay Hsu ? ? |
Michiel W.Beijen | L.Bao | Jarred Glaser | Pemburu Boyd | Cesar Giulietti | Marcus Lim | Henry Zhou ? |
William Stam | andrew melakukannya | Boseong Choi | Kim Minki | Jeongseop Lim | FergusMok | Manu Singhal |
Jerry Wu | horo ? | Ross Titmarsh | Mike Korneev | Patrick Neise | Jean Arhancet ? | Leo Alekseev |
aranvir | terapis kelinci | Ben Luo | Hugo van Kemenade | Michael Gerbig | KrisOG ? | Harryle |
James Bennett ? | sherbang | Carl Smedstad | Taein Min | Stanislav Lyu. ? | Tibor Reiss | Alex ? |
Joren Enam | jderrien | KemungkinanPanda | evstrat ? | Ikko Eltociear Ashimine | Taimur Ibrahim | aku-armstrong |
Anuranjan Srivastava | Simon Yusuf | Abel Kidanemariam | Potong21 | Agustin Arce | Farhan Ali Raza | Fabian |
Muhammad Babel | Charles Duffy | Yevgeny Demchenko | Olzhas Arystanov ? | Vikash |
Proyek ini mengikuti spesifikasi semua kontributor. Kontribusi apa pun diterima!