主应用类

前面的最小应用中使用Starlette类初始化了核心的app应用变量。这个Starlette类就是Starlette中的主应用类,通过创建一个Starlette类的实例可以创建一个新的Starlette应用。

Starlette类主要提供了以下功能:

  • 定义应用的路由处理:
    • app.add_route(path, func, methods=["GET"]),添加一个HTTP路由,其中path为路由路径,func为处理函数,处理函数可以是异步函数或者普通函数,但其签名格式需要是格式func(request, **kwargs) -> response
    • app.add_websocket_route(path, func),添加一个WebSocket路由,其中func为处理函数,必须是异步函数,签名格式为func(session, **kwargs)
    • @app.route(path, methods=['GET'])app.add_route()的修饰器版本,可以直接用来修饰处理函数。
    • @app.websocket_route(path)app.add_websocker_route()的修饰器版本。
  • 定义应用事件处理器:
    • app.add_event_handler(event_type, func),添加一个时间处理器,其中event_type只能取值'startup'或者'shutdown',分别表示应用启动事件和应用关闭事件。
    • @app.on_event(event_type)app.add_event_handler()的修饰器版本。
  • 加载其他的子应用:
    • app.mount(prefix, sub_app),将子应用(Starlette类实例)加载到路由前缀为prefix的路由下。这常用来组织复杂应用。
  • 处理异常:
    • app.add_exception_handler(exc_class_or_status_code, handler),添加一个异常处理器,用于处理指定的异常类型或者HTTP状态码;处理函数可以是异步函数或者普通函数,其签名格式为func(request, exc) -> response
    • @app.exception_handler(exc_class_or_status_code)app.add_exception_handler()的修饰器版本。
    • app.debug,启用或者禁用浏览器中的错误追踪。

Starlette类提供的功能可以看出,Web应用中核心的路由功能和事件处理功能都是由Starlette来完成的,多个Starlette类可以将整个Web应用进行模块化分隔,并重新组织起来。