애플리케이션
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_startup
및on_shutdown
핸들러를 대체하는 새로운 스타일로, 둘 중 하나만 사용해야 합니다.
앱 인스턴스에 상태 저장하기
제네릭 app.state
속성을 사용하여 애플리케이션 인스턴스에 임의의 추가 상태를 저장할 수 있습니다.
예를 들어:
app.state.ADMIN_EMAIL = 'admin@example.org'
앱 인스턴스에 접근하기
request
가 사용 가능한 곳(즉, 엔드포인트와 미들웨어)에서는 request.app
을 통해 앱에 접근할 수 있습니다.