엔드포인트
Starlette에는 HTTP 메서드 스케줄링 및 WebSocket 세션을 처리하기 위한 클래스 기반 보기 패턴을 제공하는 HTTPEndpoint 및 WebSocketEndpoint 클래스가 포함되어 있습니다.
HTTP 엔드포인트
HTTPEndpoint 클래스는 ASGI 응용 프로그램으로 사용할 수 있습니다.
Starlette.에서 일반 텍스트 응답을 가져옵니다.
Starlette.endpoint에서 HTTPEndpoint 가져오기
클래스 앱(HTTPEndpoint):
Aync def get (자체, 요청):
일반 텍스트 응답을 반환합니다(f "Hello, world!")
Starlette 응용 프로그램 인스턴스를 사용하여 라우팅을 처리하는 경우 HTTPEndpoint 클래스로 예약할 수 있습니다. 클래스의 인스턴스가 아닌 클래스 자체로 예약하십시오.
Starlette. 응용 프로그램이 Starlette에서 가져옵니다.
Starlette.에서 일반 텍스트 응답을 가져옵니다.
Starlette.endpoint에서 HTTPEndpoint 가져오기
별자리에서. 라우팅 가져오기 경로
클래스 홈페이지(HTTPEndpoint):
Aync def get (자체, 요청):
일반 텍스트 응답을 반환합니다(f "Hello, world!")
클래스 사용자(HTTPEndpoint):
Aync def get (자체, 요청):
사용자 이름 = 요청. pase_params ['username']
일반 텍스트 응답을 반환합니다(f "Hello,{username}")
경로 = [
경로("/", 홈페이지),
경로("/{username}", 사용자)
]
앱=스타렛(루트=루트)
해당 처리기에 매핑되지 않은 요청 메서드에 대해 HTTP 엔드포인트 클래스는 "405 메서드가 허용되지 않음" 응답으로 응답합니다.
웹 소켓 엔드포인트
WebSocketEndpoint 클래스는 ASGI 응용 프로그램입니다. WebSocket 인스턴스의 기능은 래퍼를 제공합니다.
ASGI 연결 범위는 엔드포인트 인스턴스의 .scope 를 통해 액세스할 수 있으며 on_receive 메서드에서 예상되는 WebSocket 데이터를 검증하도록 선택적으로 설정할 수 있는 속성 encoding 가 있습니다.
인코딩 유형은 다음과 같습니다.
'json''bytes''text'
특정 ASGI WebSocket 메시지 유형을 처리하는 세 가지 재작성 가능한 방법이 있습니다.
async def on_connect(websocket, **kwargs)async def on_receive(websocket, data)-
async def on_disconnect(websocket, close_code)Starlette.endpoint에서 WebSocketEndpoint 가져오기
클래스 앱(WebSocketEndpoint): 인코딩 = 'byteses'
Aync def on_link(자체, 웹 소켓): 웹소켓을 기다리세요. 수락하세요 () Async def on_(자체, 웹 소켓, 데이터): 웹 소켓 send_bytes를 기다립니다(b " 메시지: " + 데이터) Async def on_dislink(자체, 웹 소켓, close_code): 통과
WebSocketEndpoint 는 Starlette 응용 프로그램 클래스와 함께 사용할 수도 있습니다.
uvicorn 가져오기
Starlette. 응용 프로그램이 Starlette에서 가져옵니다.
Starlette.endpoint에서 WebSocketEndpoint, HTTPEndpoint 가져오기
Starlette.에서 HTML 응답 가져오기
스타렛에서. 라우팅 가져오기 경로, 웹 소켓 경로
HTML=""
<! DOCTYPE html>
<html>
<head>
<title>채팅</title>
</head>
<body>
<h1>웹 소켓 채팅</h1>
<form action="" onsubmit="sendMessage(event)">
<input type="text" id="messageText" autocomplete="off"/>
<button>보내기</button>
</form>
<ul id='messages'>
</ul>
<script>
Var ws = 새 웹 소켓("ws://localhost:8000/ws");
메시지 = 기능(이벤트) {
Var 메시지 = ent.getElementById('메시지')
Var 메시지 = ent.createElement('li')
Var 콘텐츠 = ent.createTextNode(event.data)
메시지. 부록 어린이(콘텐츠)
메시지. 부록 자녀(메시지)
};
기능 보내기 메시지(이벤트) {
Var 입력 = ent.getElementById("메시지 텍스트")
Ws. 보내기(입력.값)
입력.값 ="
이벤트.ent ()
}
</script>
</body>
</html>
"""
클래스 홈페이지(HTTPEndpoint):
Aync def get (자체, 요청):
HTML 응답(html)을 반환합니다.
클래스 에코(WebSocketEndpoint):
인코딩 = "텍스트"
Async def on_(자체, 웹 소켓, 데이터):
웹소켓 send_gate를 기다립니다(f "메시지 텍스트는:{data}")
경로 = [
경로("/", 홈페이지),
웹 소켓 루트("/ws", 에코)
]
앱=스타렛(루트=루트)