Zpět na domů

Starlette 1.0.0: odstranění a opravy

Starlette 1.0.0 — první stabilní vydání s odstraněním zastaralých API jako on_startup a @route. Přidáno sledování sezení, opraveny WebSocket a parsování formulářů. Podrobný průvodce migrací pro vývojáře.

Vydána Starlette 1.0.0 — čištění API
Advertisement 728x90

Starlette 1.0.0: klíčové změny ve stabilním vydání

Starlette dosáhlo první stabilní verze 1.0.0 po téměř osmi letech vývoje. Vydání se zaměřuje na odstranění zastaralých API, opravu chyb v zpracování WebSocket, formulářů a statických souborů. Framework zůstává základem FastAPI a používá se v Python MCP SDK pro AI aplikace.

Nové funkce

V verzi 1.0.0 bylo přidáno sledování přístupu a změn relace v SessionMiddleware. To umožňuje middleware zachytit čtení a úpravu relančních dat bez dalších úprav.

V relesi 1.0.0rc1 byl zaveden generický stav pro WebSocket. Nyní je stav připojení typizován, což usnadňuje práci s TypedDict nebo Pydantic modely v asynchronních obsluhách.

Google AdInline article slot

Opravy chyb

Relese odstraňuje několik kritických problémů:

  • Zpracování selhání WebSocket ve StreamingResponse a FileResponse: nyní odpovědi správně uzavírají připojení bez úniků.
  • FormParser používá bytearray pro akumulaci polí, což snižuje spotřebu paměti při parsování velkých formulářů.
  • MultiPartParser.parse() přesouvá parser.finalize() do try/except, což zabraňuje výjimkám při neúplných multipart datech.

Další opravy z rc1:

  • Hlavička Content-Range pro odpovědi 416 zahrnuje jednotku bytes.
  • StaticFiles zpracovává nulové bajty v cestách bez pádu.
  • Parsování Range používá seřazené sloučení pro přesnost.
  • Více rozsahů v odpovědi používá Content-Type místo Content-Range.
  • Multipart byterange hranice aplikují CRLF ukončení.
  • FileResponse nemodifikuje hlavičky při range požadavcích.
  • CORS odpovědi vracejí explicitní origin při credentials.
  • Jinja2Templates zahrnuje autoescape jako výchozí.

Odstraněné zastaralé prvky

Starlette 1.0.0 provádí úklid API a odstraňuje deprecated funkce. Migrace je povinná pro projekty na starších verzích.

Google AdInline article slot

Zde je úplný seznam odstranění:

  • Parametry on_startup a on_shutdown ze Starlette a Router. Nahrazeny lifespan.
  • Dekorátor on_event(). Používejte lifespan.
  • Metodu add_event_handler(). Používejte lifespan.
  • Metody startup() a shutdown() z Router.
  • Dekorátor @app.route(). Používejte Route v routes.
  • Dekorátor @app.websocket_route(). Používejte WebSocketRoute v routes.
  • Dekorátor @app.exception_handler(). Používejte exception_handlers.
  • Dekorátor @app.middleware(). Používejte middleware.
  • Funkci iscoroutinefunction_or_partial() ze starlette.routing.
  • Parametr **env_options z Jinja2Templates. Předávejte připravený jinja2.Environment přes env.
  • Zastaralou signaturu TemplateResponse(name, context). Vyžaduje request: TemplateResponse(request, name, ...).
  • Zastaralý parametr method z FileResponse.

Změny v chování

Jinja2Templates nyní vyžaduje nainstalovaný jinja2 již při importu, nejen při instancování. To urychluje diagnostiku závislostí v CI/CD.

Migrace na 1.0.0

  • Nahraďte všechny on_startup/on_shutdown lifespan kontextem:
from contextlib import asynccontextmanager

@asynccontextmanager
async def lifespan(app: Starlette):
    # startup
    yield
    # shutdown

app = Starlette(lifespan=lifespan, routes=[...])
  • Přesuňte routy do seznamu routes:
routes = [
    Route("/", endpoint=home),
    WebSocketRoute("/ws", endpoint=ws_endpoint),
]
  • Aktualizujte exception_handlers a middleware podobně.
  • Pro Jinja2Templates připravte env předem:
import jinja2
env = jinja2.Environment(autoescape=True)
templates = Jinja2Templates(env=env)

Po aktualizaci otestujte testy na range požadavky a multipart formuláře.

Google AdInline article slot

Co je důležité

  • Stabilita API: Odstraněny všechny deprecated prvky, kód je čistší a předvídatelnější.
  • WebSocket a streamování: Opravena manipulace se selháními, vhodné pro produkci.
  • Formuláře a soubory: Optimalizována paměť a parsování multipart/range.
  • Lifespan náhrada: Jednotný způsob lifecycle hooků, kompatibilní s ASGI 3.0+.
  • Jinja2: Přísné požadavky na závislosti a autoescape jako výchozí.

— Editorial Team

Advertisement 728x90

Číst dál