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('Hello, world!')

def user_me(request):
    username = "John Doe"
    return PlainTextResponse('Hello, %s!' % username)

def user(request):
    username = request.path_params['username']
    return PlainTextResponse('Hello, %s!' % username)

async def websocket_endpoint(websocket):
    await websocket.accept()
    await websocket.send_text('Hello, websocket!')
    await websocket.close()

def startup():
    print('Ready to go')


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])

实例化应用程序

::: starlette.applications.Starlette :文档字符串

在应用实例上存储状态

您可以使用通用的 app.state 属性在应用程序实例上存储任意额外的状态。

例如:

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

访问应用实例

request 可用的地方(即端点和中间件),该应用程序可在 request.app 上使用。