返回

FastAPI 中的路由装饰器:函数与类装饰器详尽解析

后端

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。