Réponses
Starlette contient des classes de réponse pour envoyer des messages ASGI appropriés sur le canal send.
Répondre à
Signé par: Response(content, status_code=200, headers=None, media_type=None)
content- Une chaîne de caractères ou une chaîne d'octets.status_code- Un code d'état HTTP de type entier.headers- Dictionnaire String.media_type- Une chaîne qui donne le type de média. ex: "text/html"
Starlette inclura automatiquement un en-tête Content-Length. il inclura également un en-tête Content-Type basé sur media_type et ajoutera un jeu de caractères au type de texte, sauf si un jeu de caractères a déjà été spécifié dans media_type.
Une fois que vous avez instancié une réponse, vous pouvez l'envoyer en l'appelant comme une instance d'application ASGI.
from starlette.responses Réponse à l'importation
async def app(scope, receive, send):
assert scope ['type'] == 'http'
response = Response('Hello, world!', media_type ='text/plain').
Await response(scope, receive, send)
Installer des cookies
Starlette fournit une méthode set_cookie qui vous permet de définir des cookies sur les objets responsive.
Signé par: Response.set_cookie(key, value, max_age=None, expires=None, path="/", domain=None, secure=False, httponly=False, samesite="lax")
key- Une chaîne de caractères qui servira de clé de Cookie.value- Une chaîne de caractères qui servira de valeur au Cookie.max_age-Un nombre entier qui définit la durée de vie du Cookie en secondes. un nombre entier négatif ou une valeur de0supprimera immédiatement le Cookie.Optionalexpires- Soit un nombre entier qui définit le nombre de secondes avant l'expiration du Cookie, soit une date et une heure.Optionalpath- Une chaîne qui spécifie le sous-ensemble de routes auquel ce Cookie sera appliqué.Optionaldomain- Une chaîne de caractères qui spécifie le domaine dans lequel le cookie est valide.Optionalsecure- Valeur booléenne indiquant que le Cookie n'est envoyé au serveur que si une demande est faite en utilisant les protocoles SSL et HTTPS.Optionalhttponly- Une valeur booléenne indiquant le passage deDocument.cookieLes attributs,XMLHttpRequestou bienRequestAPI, ce cookie n'est pas accessible via JavaScript.Optionalsamesite- Une chaîne de caractères qui spécifie la politique de sameSite pour les cookies. les valeurs valides sont'lax'、'strict'et de'none'par défaut est'lax'。Optional
Effacer les cookies
Au lieu de cela, Starlette offre également un delete_cookie Méthode pour faire expirer manuellement les cookies définis.
Signé par: Response.delete_cookie(key, path='/', domain=None)
Réponse HTML
Recevoir du texte ou des octets et retourner une réponse HTML.
de starlette.responses à import HTMLResponse
async def app(scope, receive, send):
assert scope ['type'] == 'http'
response = HTMLResponse(<html><body><h1>Hello, world!</h1></body></html>)
Await Response(scope, receive, send)
Réponse en texte brut
Recevoir du texte ou des octets et retourner une réponse en texte brut.
from starlette.responses import PlainTextResponse
async def app(scope, receive, send):
assert scope ['type'] == 'http'
response = PlainTextResponse('Hello, world!')
Await response(scope, receive, send)
Réponse JSON
Prenez quelques données et retournez une réponse codée application/json.
from starlette.responses import JSONResponse
async def app(scope, receive, send):
assert scope ['type'] == 'http'
response = JSONResponse({'hello': 'world'})
Await response(scope, receive, send)
Sérialisation JSON personnalisée
Si vous avez besoin d'un contrôle granulaire sur la sérialisation JSON, vous pouvez sous-classer JSONResponse et remplacer la méthode render.
Par exemple, si vous souhaitez utiliser une bibliothèque JSON tierce, telle que orjson:
de type import Any
Importer à Orjson
from starlette.responses import JSONResponse
OrjsonResponse(JSONResponse):
def render(self, content: Any) -> Bytes:
return orjson.dumps(content)
En général, à moins que vous ne souhaitiez micro-optimiser un point final spécifique ou que vous ayez besoin de sérialiser un type d'objet non standard, vous voudrez peut-être vous en tenir à JSONResponse par défaut.
Rediriger la réponse
Renvoie une redirection HTTP. le code d'état 307 est utilisé par défaut.
from starlette.responses import PlainTextResponse, RedirectResponse
async def app(scope, receive, send):
assert scope ['type'] == 'http'
Si scope ['path'] != '/':
response = RedirectResponse(url ='/')
Else:
response = PlainTextResponse ('Bonjour, monde!')
Await Response(scope, receive, send)
Stream réponse
Un générateur asynchrone ou un générateur/itérateur ordinaire est accepté et le corps de réponse est traité en continu.
from starlette.responses import StreamingResponse
Import asyncio
async def slow_numbers(minimum, maximum):
Yield '<html><body><ul>'
pour le nombre dans la plage (minimum, maximum + 1):
yield '<li>%d</li>' % nombre
await asyncio.sleep(0,5)
Yield '</ul></body></html>'.
async def app(scope, receive, send):
assert scope ['type'] == 'http'
generator = slow_numbers(1, 10)
response = StreamingResponse(generator, media_type ='text/html')
Await response(scope, receive, send)
Notez que les objets de fichier de classe, tels que ceux créés par open(), sont des itérateurs normaux. vous pouvez donc les renvoyer directement dans StreamingResponse.
Réponse du fichier
Streaming des fichiers en tant que réponse de manière asynchrone.
Un ensemble différent de paramètres est requis lors de l'instanciation par rapport aux autres types de réponse:
path- Le chemin du fichier du fichier à diffuser.headers- Tout en-tête personnalisé à inclure comme dictionnaire.media_type- Une chaîne qui donne le type de média. si elle n'est pas définie, le nom de fichier ou le chemin d'accès est utilisé pour déduire le type de média.filename-Si elle est définie, elle sera incluse dans la réponseContent-Disposition.content_disposition_type-sera inclus dans la réponseContent-Disposition. peut être réglé sur "pièce jointe"(valeur par défaut) ou "inline"
La réponse du fichier contiendra les en-têtes Content-Length,Last-Modified et ETag appropriés.
from starlette.responses Import FileResponse
async def app(scope, receive, send):
assert scope ['type'] == 'http'
response = FileResponse('statics/favicon.ico')
Await response(scope, receive, send)
Réponses de tiers
Réponse à Incident Source
Une classe de réponse qui implémente les événements envoyés par le serveur. il est capable de mettre en œuvre un flux d'événements du serveur au client sans la complexité des WebSockets.
baize.asgi.FileResponse
Comme alternative fluide à Starlette FileResponse, il traitera automatiquement les méthodes Head et les demandes Range.