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