Endpunkte
Starlette enthält die Klassen HTTPEndpoint und WebSocketEndpoint, die ein klassenbasiertes Ansichtsmuster für die Verarbeitung von HTTP-Methodenplanung und WebSocket-Sitzungen bereitstellen.
HTTP-Endstufe
HTTPEndpoint Klassen sind als ASGI-Anwendungen verfügbar:
from starlette. responses import plainTextResponse (englisch)
von starlette. endpoints import HTTPENdpoint
class App (HTTPENDpoint) funktioniert mit:
async def get (self, request): oder
return PlainTextResponse (f "Hallo, Welt!")
Wenn Sie eine Starlette-Anwendungsinstanz verwenden, um das Routing zu verarbeiten, können Sie die Planung zu einer HTTPEndpoint-Klasse durchführen, indem Sie sicherstellen, dass der Zeitplan an die Klasse selbst und nicht an die Instanz der Klasse gerichtet wird:
von starlette. applications import Starlette
from starlette. responses import plainTextResponse (englisch)
von starlette. endpoints import HTTPENdpoint
von starlette. routing import Route
Die Klassen-Homepage (HTTPENDpoint):
async def get (self, request): oder
return PlainTextResponse (f "Hallo, Welt!")
Benutzerklasse (HTTPENDpoint):
async def get (self, request): oder
username = request. path_params VARITIA 'username'][Benutzername]
return PlainTextResponse (für "Hello,{username}")
Die Bahn […]
Route ("/", Webseite),
Route („/{username}", Benutzer)
]
Starlette (Routen = Routen) Bearbeiten
Für alle Anforderungsmethoden, die nicht dem entsprechenden Handler zugeordnet sind, antwortet die HTTP-Endpunktklasse mit der Antwort "405 Method Not Allowed".
WebSocket im Überblick
Die WebSocketEndpoint-Klasse ist eine ASGI-Anwendung , die einen Wrapper um die Funktionalität von WebSocket-Instanzen herum bereitstellt .
Am letzten Beispiel kann man durch .scope Zugriff auf einen ASGI-Verbindungsbereich und er hat eine Eigenschaft encoding , um dort on_receive Die erwarteten WebSocket-Daten werden in der Methode überprüft, und die Eigenschaft kann optional festgelegt werden.
Codierungstypen sind :
'json''bytes''text'
Es gibt drei schreibbare Möglichkeiten , bestimmte ASGI WebSocket-Nachrichtentypen zu verarbeiten :
async def on_connect(websocket, **kwargs)async def on_receive(websocket, data)-
async def on_disconnect(websocket, close_code)from starlette . endpoints import WebSocketEndpoint (englisch)
Klasse App (WebSocketEndpoint) : Encoding = ' Bytes ' eingeben
async def auf _ connect (self , websocket) : Websocket aufrufen . accept () async def auf _ receive (self , websocket , data) : await websocket . send _ bytes (b " Nachricht : " + Daten) async def auf _ disconnect (self , websocket , close _ code) : Durchreise
WebSocketEndpoint kann auch mit der Starlette-Anwendungsklasse verwendet werden :
Import von Uvicorn
von starlette . applications import Starlette
von starlette . endpoints import WebSocketEndpoint , HTTPEndpoint
from starlette . responses import HTMLResponse (englisch)
von starlette . routing import route , WebSocketRoute
Mit html = " "
<!DOCTYPE html>
<html>
<head>
<title>Der Chat</title>
</head>
<body>
<h1>Der WebSocket Chat</h1>
<form action="" onsubmit="sendMessage(event)">
<input type="text" id="messageText" autocomplete="off"/>
<button>Senden Sie</button>
</form>
<ul id='messages'>
</ul>
<script>
var ws = new WebSocket (" ws ://localhost : 8000/ws ") ;
ws . onmessage = function (Veranstaltung) {
var messages = document . getElementById ('messages')
var message = document . createElement ('li') [ Nachricht schreiben ]
Inhalt : Die Datei " CreateText-Datei " (event.data)
message . appendChild (Inhalt)
messages . appendChild (Nachrichten)
};
function sendMessage (Ereignis) {
var input = document . getElementById (" messageText ")
ws . send (Eingabe . Wert)
Eingabe . Wert = ' '
event . preventDefault () Bearbeiten
}
</script>
</body>
</html>
"""
Die Klassen-Homepage (HTTPENDpoint) :
async def get (self , request) : oder
zurück HTMLResponse (html)
Klasse Echo (WebSocketEndpoint) :
Encoding = " Text " (Text eingeben)
async def auf _ receive (self , websocket , data) :
await websocket . send _ text (f " Nachrichtentext was :{data}")
Die Bahn [ … ]
Route ("/" , Webseite) ,
WebSocketRoute ("/ws " , Echo) Bearbeiten
]
Starlette (Routen = Routen) Bearbeiten