콘텐츠로 이동

엔드포인트

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", 에코)
]

앱=스타렛(루트=루트)