跳转到内容

使用中间件和事件

随着蝙蝠侠的应用程序变得越来越复杂,Robyn 向他传授了中间件、启动和关闭事件,甚至如何使用 WebSockets。蝙蝠侠学习了如何创建可以在请求之前或之后执行的函数、管理应用程序的生命周期以及如何使用 WebSockets 处理与客户端的实时通信。

处理事件

Batman 发现他可以添加启动和关闭事件来管理应用程序的生命周期。他添加了以下代码来定义这些事件:

蝙蝠侠很高兴地得知他可以将事件添加为函数以及装饰器。

py
# GET /hello_world
async def startup_handler():
  print("Starting up")

app.startup_handler(startup_handler)
py
# GET /hello_world
@app.shutdown_handler
def shutdown_handler():
    print("Shutting down")

对于异步请求,蝙蝠侠使用:

py
# GET /hello_world
@app.get("/")
async def h(request):
    return "Hello, world"
py
# GET /hello_world
from robyn import Request 

@app.get("/")
async def h(request: Request) -> str:
    return "Hello, world"

POST /http_requests

处理中间件

蝙蝠侠学会了使用中间件的同步和异步函数。他编写了以下代码来添加一个在每个请求之前和之后执行的中间件。请求前中间件是在每个请求之前执行的函数。它可以在请求被处理之前修改请求对象或者执行任何其他操作。请求后中间件是在每次请求后执行的函数。它可以在请求处理完成后修改响应对象或者执行任何其他操作。

每一个请求中间件都应该接受一个请求对象并返回一个请求对象。每个请求中间件都应该接受一个响应对象,并在顺利的情况下返回一个响应对象。

如果任何请求前的中间件返回响应对象,则请求前的中间件的执行将停止。响应对象无需执行后请求中间件或主入口点代码就返回给客户端。

py
# POST /http_requests
@app.before_request("/")
async def hello_before_request(request: Request):
    request.headers["before"] = "sync_before_request"
    return request

@app.after_request("/")
def hello_after_request(response: Response):
    response.headers.set("after", "sync_after_request"")
    return response
py
# POST /http_requests
from request import Request, Response

@app.before_request("/")
async def hello_before_request(request):
    request.headers.set("before", "sync_before_request")
    return request

@app.after_request("/")
def hello_after_request(response):
    response.headers.set("after", "sync_after_request"")
    return response

下一步是什么?

Robyn - 太好了,你现在已经熟悉了 Robyn 的某些高级概念。

蝙蝠侠 - “身份验证!我想了解身份验证。我想确保只有合适的人才能访问我的应用程序。”

Robyn-是的,身份验证!

基于 MIT 许可发布