随着代码库的不断扩展,蝙蝠侠希望找到一种更好的方式来组织代码。Robyn 告诉他,他有能力以更清晰的方式组织代码,并向他介绍了视图和子路由器的概念。
视图 (Views)
为了更好地组织代码,无论是按照职责分组还是进行代码拆分,蝙蝠侠都可以选择使用视图。
简单来说,视图就是一个包含多个处理函数(闭包)的函数。例如:
Request
GET
/hello_world from robyn import Request
def sample_view():
def get():
return "Hello, world!"
def post(request: Request):
body = request.body
return Response({"status_code": 200, "description": body, "headers": {}})
上面的视图包含了处理 GET 和 POST 请求的两个闭包。
您可以通过以下两种方式来提供视图:
使用 @app.view 装饰器:
Request
GET
/hello_worldfrom robyn import Request
@app.view("/sync/view/decorator")
def sync_decorator_view():
def get():
return "Hello, world!"
def post(request: Request):
body = request.body
return body
使用 app.add_view 方:
Request
GET
/hello_world from .views import sample_view
...
...
app.add_view("/", sample_view)
子路由器 (Subrouters)
蝙蝠侠可以在 Robyn 项目中创建子路由器,用于将多个相关的路由分组在一起,方便管理和使用。
子路由器不仅可以用来管理常规的 HTTP 路由,还可以用来管理 Web 套接字(web sockets)路由。换句话说,子路由器的功能与主路由器类似,它可以被视作是主路由器的一个简化版。
有一点需要注意的是,子路由器必须添加到主路由器中。
Request
GET
/hello_worldfrom robyn import Robyn, SubRouter
app = Robyn(__file__)
sub_router = SubRouter("/sub_router")
@sub_router.get("/hello")
def hello():
return "Hello, world"
web_socket = SubRouter("/web_socket")
@web_socket.message()
async def hello():
return "Hello, world"
app.include_router(sub_router)
下一步
现在,蝙蝠侠已经了解了如何组织代码,接下来他希望学习如何向代码中添加依赖项。Robyn 告诉他,依赖项可以在全局级别、路由器级别和视图级别进行添加。
