Ga naar inhoud

Responses

Starlette bevat antwoordklassen voor het verzenden van geschikte ASGI-berichten via het send-kanaal.

reactie

Handtekening: Response(content, status_code=200, headers=None, media_type=None)

  • content - Een string of byte string.
  • status_code Een gehele HTTP-statuscode.
  • headers - snaarwoordenboek.
  • media_type - Een string die het mediatype geeft. Bijvoorbeeld: "text / html"

Starlette voegt automatisch een Content-Length header toe. Het bevat ook een Content-Type header afhankelijk van het media _ type en voegt een tekenset toe voor het teksttype, tenzij de tekenset al is gespecificeerd in media_type.

Zodra u een antwoord heeft geïnstantieerd, kunt u het verzenden door het aan te roepen als een ASGI-toepassingsinstantie.

Reacties van starlette. import


Async def app (bereik, ontvangen, verzenden):
    Toepassingsgebied ['type'] = = 'http'
    Reactie = Reactie ('Hallo, wereld!', media _ type = 'tekst / gewoon')
    In afwachting van reactie (scope, ontvangen, verzenden)

Cookies instellen

Starlette biedt een set_cookie-methode waarmee u cookies op responsobjecten kunt instellen.

Handtekening: Response.set_cookie(key, value, max_age=None, expires=None, path="/", domain=None, secure=False, httponly=False, samesite="lax")

  • key Een string die zal worden gebruikt als een cookie key.
  • value Een string die zal worden gebruikt als de cookiewaarde.
  • max_age- Een geheel getal dat de levensduur van de cookie in seconden definieert. Een negatief geheel getal of waarde van 0 zal de cookie onmiddellijk weggooien.Optional
  • expires - Ofwel een geheel getal dat het aantal seconden definieert voordat de cookie verloopt, ofwel een datum en tijd. Optional
  • path Een string die de subset van routes specificeert waarop de cookie van toepassing zal zijn. Optional
  • domain - Een string die het veld aangeeft waar de cookie geldig is. Optional
  • secure Een booleaanse waarde die aangeeft dat cookies alleen naar de server worden verzonden wanneer een verzoek wordt gedaan met behulp van de SSL- en HTTPS-protocollen. Optional
  • httponly- Een booleaanse waarde die aangeeft dat de cookie niet toegankelijk is via JavaScript via de eigenschap Document.cookie,XMLHttpRequest of Request API.Optional
  • samesite- een string die het sameSite-beleid voor cookies specificeert. Geldige waarden zijn 'lax','strict' en 'none'. Standaard is 'lax'.Optional

Cookies verwijderen

Integendeel, Starlette biedt ook een delete_cookie-methode om set cookies handmatig te laten verlopen.

Handtekening: Response.delete_cookie(key, path='/', domain=None)

HTML reactie

Ontvang wat tekst of bytes en retourneer een HTML-antwoord.

Uit starlette.reacties importeren HTMLResponse


Async def app (bereik, ontvangen, verzenden):
    Toepassingsgebied ['type'] = = 'http'
    Reactie = HTMLReactie ('<html><body><h1>Hallo, wereld!</h1></body></html>')
    In afwachting van reactie (scope, ontvangen, verzenden)

gewone tekst reactie

Ontvangt wat tekst of bytes en retourneert een antwoord in platte tekst.

Vanaf starlette.reacties importeren PlainTextResponse


Async def app (bereik, ontvangen, verzenden):
    Toepassingsgebied ['type'] = = 'http'
    Reactie = PlainTextResponse ('Hallo, wereld!')
    In afwachting van reactie (scope, ontvangen, verzenden)

JSON reactie

Krijg wat gegevens en retourneer een application/json-gecodeerd antwoord.

Uit starlette.reacties importeren JSONResponse


Async def app (bereik, ontvangen, verzenden):
    Toepassingsgebied ['type'] = = 'http'
    Reactie = JSONReactie ({'hello': 'world'})
    In afwachting van reactie (scope, ontvangen, verzenden)

Aangepaste JSON-serialisatie

Als u fijnkorrelige controle over JSON-serialisatie nodig heeft, kunt u JSONResponse subklassen en de render-methoden overschrijven.

Als u bijvoorbeeld een JSON-bibliotheek van derden wilt gebruiken, zoals orjson:

Elke import uit typen

Orjson importeren
Uit starlette.reacties importeren JSONResponse


Klasse OrjsonResponse (JSONResponse):
    Def render (zelf, inhoud: Elke) - > bytes:
        Retourneert orjson.dumps (inhoud)

Over het algemeen wilt u, tenzij u specifieke eindpunten wilt micro-optimaliseren of niet-standaard objecttypes moet serialiseren, standaard bij JSONResponse blijven.

Reactie omleiden

Retourneert een HTTP-omleiding. Standaard wordt 307-statuscode gebruikt.

Importeer vanuit starlette.reacties PlainTextResponse, RedirectResponse


Async def app (bereik, ontvangen, verzenden):
    Toepassingsgebied ['type'] = = 'http'
    Als scope ['pad']! = '/':
        Reactie = RedirectResponse (url = '/')
    Anders:
        Reactie = PlainTextResponse ('Hallo, wereld!')
    In afwachting van reactie (scope, ontvangen, verzenden)

streaming reactie

Neem een asynchrone generator of een normale generator / iterator en stream het responslichaam.

StreamingResponse geïmporteerd uit starlette.response
Asyncio importeren


Async def slow _ nummers (minimum, maximum):
    Opbrengst '<html><body><ul>'
    Voor aantallen binnen bereik (minimum, maximum + 1):
        Opbrengst '<li>% d</li>'% nummer
        In afwachting van asyncio.sleep (0.5)
    Opbrengst '</ul></body></html>'


Async def app (bereik, ontvangen, verzenden):
    Toepassingsgebied ['type'] = = 'http'
    Generator = langzame _ nummers (1, 10)
    Reactie = StreamingResponse (generator, media _ type = 'tekst / html')
    In afwachting van reactie (scope, ontvangen, verzenden)

Houd er rekening mee dat klasse-bestandsobjecten (zoals die gemaakt door open()) normale iterators zijn. Daarom kunt u ze rechtstreeks in StreamingResponse retourneren.

bestand reactie

Stream het bestand asynchroon als antwoord.

Instantiatie vereist een andere set parameters dan andere responstypen:

  • path Het bestandspad van het te streamen bestand.
  • headers - Eventuele aangepaste kopteksten die als woordenboek moeten worden opgenomen.
  • media_type - Een tekenreeks die het mediatype geeft. Indien niet ingesteld, wordt de bestandsnaam of het pad gebruikt om het mediatype af te leiden.
  • filename- Indien ingesteld, wordt het opgenomen in de reactie Content-Disposition.
  • content_disposition_type- wordt opgenomen in de reactie Content-Disposition. Kan worden ingesteld op "attachment" (standaard) of "interne verbinding".

Het bestandsantwoord bevat de juiste Content-Length-,Last-Modified- en ETag-headers.

FileResponse geïmporteerd uit starlette.response


Async def app (bereik, ontvangen, verzenden):
    Toepassingsgebied ['type'] = = 'http'
    Reactie = FileResponse ('statics / favicon.ico')
    In afwachting van reactie (scope, ontvangen, verzenden)

reactie van derden

incident bron reactie

Een responsklasse die door de server verzonden gebeurtenissen implementeert. Het maakt het streamen van gebeurtenissen van server naar client mogelijk zonder de complexiteit van WebSockets.

Baize.asgi. BestandRespons

Als een soepel alternatief voor Starlette FileResponse, zal het automatisch Head-methoden en bereikverzoeken afhandelen.