FastAPI 中的路由装饰器:函数与类装饰器详尽解析
2023-10-08 15:56:32
FastAPI 中的路由装饰器概述
FastAPI 是一个功能强大的 Python 框架,用于构建 REST API。它提供了丰富的功能和特性,包括路由装饰器。路由装饰器允许您在路由上添加额外的功能,例如权限校验、自定义依赖项和中间件。
函数装饰器
函数装饰器是一种特殊的函数,它可以用来包装另一个函数,并在该函数执行前或执行后做一些额外的事情。在 FastAPI 中,函数装饰器可以用来为路由提供额外功能。
例如,以下函数装饰器可以用来为路由添加权限校验功能:
def auth_required(func):
def wrapper(*args, **kwargs):
if not current_user.is_authenticated:
return {"detail": "Unauthorized"}, 401
return func(*args, **kwargs)
return wrapper
这个函数装饰器可以用来装饰任何路由函数,以添加权限校验功能。如果当前用户未经身份验证,则该函数装饰器将返回一个 401 Unauthorized 响应。否则,它将调用原始的路由函数。
类装饰器
类装饰器是一种特殊的类,它可以用来包装另一个类,并在该类实例化前或实例化后做一些额外的事情。在 FastAPI 中,类装饰器可以用来为路由提供额外功能。
例如,以下类装饰器可以用来为路由添加自定义依赖项功能:
class CustomDependency:
def __init__(self, name):
self.name = name
def __call__(self, request):
return {"name": self.name}
def custom_dependency(cls):
setattr(cls, "custom_dependency", CustomDependency("John Doe"))
return cls
这个类装饰器可以用来装饰任何路由类,以添加自定义依赖项功能。当路由类被实例化时,类装饰器将为该类添加一个名为 custom_dependency
的属性,该属性是一个 CustomDependency
实例。该属性可以在路由方法中使用,以访问自定义依赖项。
如何在 FastAPI 中使用路由装饰器
要在 FastAPI 中使用路由装饰器,您需要在路由函数或路由类上添加 @
符号,然后添加装饰器的名称。例如,以下代码演示了如何在路由函数上使用权限校验函数装饰器:
@auth_required
def my_route():
return {"message": "Hello, world!"}
以下代码演示了如何在路由类上使用自定义依赖项类装饰器:
@custom_dependency
class MyRoute:
@router.get("/")
def my_route(self, custom_dependency: CustomDependency = Depends(CustomDependency)):
return {"message": "Hello, {}!".format(custom_dependency.name)}
总结
FastAPI 中的路由装饰器可以为路由提供额外功能,包括权限校验、自定义依赖项和中间件。本文介绍了函数装饰器和类装饰器,以及如何在 FastAPI 中使用它们来增强 API 的功能。通过使用路由装饰器,您可以轻松地构建出功能强大且安全的 REST API。