Endpoints
Starlette bevat de klassen HTTPEndpoint en WebSocketEndpoint, die een op klassen gebaseerd weergavepatroon bieden voor het afhandelen van HTTP-methodeplanning en WebSocket-sessies.
HTTP-eindpunt
HTTPEndpoint Klassen kunnen worden gebruikt als ASGI-toepassingen:
Vanaf starlette.reacties importeren PlainTextResponse
Vanuit starlette.endpoints HTTPEndpoint importeren
Klasse-app (HTTPEndpoint):
Aync def get (zelf, verzoek):
Retourneert PlainTextResponse (f "Hallo, wereld!")
Als u een Starlette-toepassingsinstantie gebruikt om routing af te handelen, kunt u plannen naar een HTTPEndpoint-klasse. Zorg ervoor dat u plant naar de klasse zelf, niet naar een instantie van de klasse:
Starlette.applicaties importeren vanuit Starlette
Vanaf starlette.reacties importeren PlainTextResponse
Vanuit starlette.endpoints HTTPEndpoint importeren
Van starlette. routing importeren Route
Klasse Startpagina (HTTPEndpoint):
Aync def get (zelf, verzoek):
Retourneert PlainTextResponse (f "Hallo, wereld!")
Klassegebruiker (HTTPEndpoint):
Aync def get (zelf, verzoek):
Gebruikersnaam = aanvraag. path _ params ['gebruikersnaam']
Retourneert PlainTextResponse (f "Hallo,{username}")
Routes = [
Route ("/", Startpagina),
Route ("/{username}", Gebruiker)
]
App = Starlette (routes = routes)
Voor elke aanvraagmethode die niet is toegewezen aan de corresponderende handler, zal de HTTP-eindpuntklasse reageren met een antwoord "405-methode niet toegestaan".
WebSocket eindpunt
WebSocketEndpoint Een klasse is een ASGI applicatie die draait om WebSocket De functionaliteit van de instantie biedt een wrapper.
Het ASGI-verbindingsbereik is toegankelijk via .scope op de eindpuntinstantie en heeft een eigenschap encoding die optioneel kan worden ingesteld om de verwachte WebSocket-gegevens in de on_receive-methode te valideren.
Het coderingstype is:
'json''bytes''text'
Er zijn drie herschrijfbare methoden voor het afhandelen van specifieke ASGI WebSocket-berichttypen:
async def on_connect(websocket, **kwargs)async def on_receive(websocket, data)-
async def on_disconnect(websocket, close_code)Vanuit starlette.endpoints importeren WebSocketEndpoint
Klasse App (WebSocketEndpoint): Codering = 'bytes'
Aync def on _ connect (zelf, websocket): Wacht op websocket.accepteer () Async def op _ ontvangen (zelf, websocket, data): Wacht op websocket send _ bytes (b "Bericht:" + gegevens) Async def on _ disconnect (zelf, websocket, close _ code): Pas voor
WebSocketEndpoint kan ook worden gebruikt met de Starlette-toepassingsklasse:
Uvicorn importeren
Starlette.applicaties importeren vanuit Starlette
Importeer vanuit starlette.endpoints WebSocketEndpoint, HTTPEndpoint
Uit starlette.reacties importeren HTMLResponse
Van starlette. routing importeren Route, WebSocketRoute
HTML = ""
<! DOCTYPE html >
<html>
<head>
<title>Chatten</title>
</head>
<body>
<h1>WebSocket Chatten</h1>
<form action="" onsubmit="sendMessage(event)">
<input type="text" id="messageText" autocomplete="off"/>
<button>Verzenden</button>
</form>
<ul id='messages'>
</ul>
<script>
Var ws = nieuwe WebSocket ("ws://localhost:8000/ws");
Ws.onMessage = functie (gebeurtenis) {
Var berichten = document.getElementById ('berichten')
Naar message = document.createElement ('li')
Var content = document.createTextNode (event.data)
Bericht.appendKind (inhoud)
Berichten.appendKind (bericht)
};
Functie sendMessage (event) {
Var input = document.getElementById ("berichttekst")
Ws.send (invoerwaarde)
Inputwaarde = "
Event.preventStandaard ()
}
</script>
</body>
</html>
"""
Klasse Startpagina (HTTPEndpoint):
Aync def get (zelf, verzoek):
Geeft HTMLResponse (html) terug
Klasse Echo (WebSocketEndpoint):
Codering = "tekst"
Async def op _ ontvangen (zelf, websocket, data):
Wacht op websocket send _ text (f "Berichttekst was:{data}")
Routes = [
Route ("/", Startpagina),
WebSocketRoute ("/ ws", Echo)
]
App = Starlette (routes = routes)