Skip to content

애플리케이션

Starlette는 다른 모든 기능을 잘 연결하는 Starlette라는 애플리케이션 클래스를 포함하고 있습니다.

from starlette.applications import Starlette
from starlette.responses import PlainTextResponse
from starlette.routing import Route, Mount, WebSocketRoute
from starlette.staticfiles import StaticFiles


def homepage(request):
    return PlainTextResponse('안녕하세요, 세계!')

def user_me(request):
    username = "John Doe"
    return PlainTextResponse('안녕하세요, %s님!' % username)

def user(request):
    username = request.path_params['username']
    return PlainTextResponse('안녕하세요, %s님!' % username)

async def websocket_endpoint(websocket):
    await websocket.accept()
    await websocket.send_text('안녕하세요, 웹소켓!')
    await websocket.close()

def startup():
    print('준비 완료')


routes = [
    Route('/', homepage),
    Route('/user/me', user_me),
    Route('/user/{username}', user),
    WebSocketRoute('/ws', websocket_endpoint),
    Mount('/static', StaticFiles(directory="static")),
]

app = Starlette(debug=True, routes=routes, on_startup=[startup])

애플리케이션 인스턴스화

class starlette.applications.Starlette(debug=False, routes=None, middleware=None, exception_handlers=None, on_startup=None, on_shutdown=None, lifespan=None)

애플리케이션 인스턴스를 생성합니다.

매개변수:

  • debug - 오류 발생 시 디버그 트레이스백을 반환할지 여부를 나타내는 부울 값.
  • routes - 들어오는 HTTP 및 WebSocket 요청을 처리할 라우트 목록.
  • middleware - 모든 요청에 대해 실행될 미들웨어 목록. Starlette 애플리케이션은 항상 자동으로 두 개의 미들웨어 클래스를 포함합니다. ServerErrorMiddleware는 전체 스택의 가장 바깥쪽에서 추가되어 어디서든 발생할 수 있는 잡히지 않은 오류를 처리합니다. ExceptionMiddleware는 라우팅 또는 엔드포인트에서 발생하는 처리된 예외 케이스를 처리하기 위해 가장 안쪽에서 추가됩니다.
  • exception_handlers - 정수 상태 코드 또는 예외 클래스 유형을 호출 가능한 예외 처리기와 매핑한 것. 예외 처리기는 handler(request, exc) -> response 형식이어야 하며, 일반 함수 또는 비동기 함수일 수 있습니다.
  • on_startup - 애플리케이션 시작 시 실행할 호출 가능한 항목 목록. 시작 핸들러는 인수를 받지 않으며, 일반 함수 또는 비동기 함수일 수 있습니다.
  • on_shutdown - 애플리케이션 종료 시 실행할 호출 가능한 항목 목록. 종료 핸들러는 인수를 받지 않으며, 일반 함수 또는 비동기 함수일 수 있습니다.
  • lifespan - 시작 및 종료 작업을 수행할 수 있는 lifespan 컨텍스트 함수. 이는 on_startupon_shutdown 핸들러를 대체하는 새로운 스타일로, 둘 중 하나만 사용해야 합니다.

앱 인스턴스에 상태 저장하기

제네릭 app.state 속성을 사용하여 애플리케이션 인스턴스에 임의의 추가 상태를 저장할 수 있습니다.

예를 들어:

app.state.ADMIN_EMAIL = 'admin@example.org'

앱 인스턴스에 접근하기

request가 사용 가능한 곳(즉, 엔드포인트와 미들웨어)에서는 request.app을 통해 앱에 접근할 수 있습니다.