使用中间件和事件
随着蝙蝠侠的应用程序逐渐变得更加复杂,Robyn 向他介绍了中间件、启动和关闭事件,甚至 WebSocket 的使用。蝙蝠侠学会了如何创建中间件(在请求之前或之后执行的函数),如何管理应用程序的生命周期,并通过 WebSocket 实现与客户端的实时通信。
处理事件
蝙蝠侠发现,通过添加启动和关闭事件,他能够有效地管理应用程序的生命周期。为此,他编写了以下代码来定义这些事件:
此外,蝙蝠侠也了解到,事件不仅可以通过函数来定义,还可以使用装饰器的方式来实现。
对于同步请求,蝙蝠侠使用如下代码:
Request
GET
/hello_worldasync def startup_handler():
print("Starting up")
app.startup_handler(startup_handler)
@app.shutdown_handler
def shutdown_handler():
print("Shutting down")
对于异步请求,蝙蝠侠则使用如下代码:
Request
GET
/hello_worldfrom robyn import Request
@app.get("/")
async def h(request: Request) -> str:
return "Hello, world"
POST/http_requests
处理中间件
蝙蝠侠学会了如何在中间件中同时使用同步和异步函数。他编写了以下代码,为每个请求添加了在请求之前和之后执行的中间件。 中间件可以分为两类:请求前中间件和请求后中间件。 该函数在每个请求处理之前执行,可以修改请求对象或执行其他操作。 请求后中间件:该函数在每个请求处理之后执行,可以修改响应对象或执行其他操作。
每个请求前中间件都应接收并返回一个请求对象;每个请求后中间件都应接收并返回一个响应对象。请求后中间件也可以选择性地接收请求对象作为第一个参数,以便访问请求数据。
如果某个请求前中间件返回了响应对象,执行将被中止,响应对象直接返回给客户端,后续的请求后中间件和主处理函数将不再执行。
Request
POST
/http_requestsfrom robyn import Request, Response
@app.before_request("/")
async def hello_before_request(request: Request):
request.headers.set("before", "sync_before_request")
return request
@app.after_request("/")
def hello_after_request(response: Response):
response.headers.set("after", "sync_after_request")
return response
下一步
Robyn - 太好了,中间件是 Robyn 框架的重要组件之一,您现在已经掌握了 Robyn 的一些高级概念。
蝙蝠侠 - 身份验证!我想了解身份验证,确保只有经过身份验证的的人才能访问我的应用程序。
Robyn - 好的,接下来我将为您介绍身份验证!
