主应用类
前面的最小应用中使用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应用进行模块化分隔,并重新组织起来。